C#程式碼實現阿里雲訊息服務MNS訊息監聽
十年河東,十年河西,莫欺少年窮
學無止境,精益求精
近幾天一直都在看阿里雲的IOT雲服務及訊息佇列MNS,一頭霧水好幾天了,直到今天,總算有點收穫了,記錄下來,方便以後查閱。
首先借用阿里雲的一張圖來說明:裝置是如何通過雲服務平臺和企業伺服器‘通話的’
針對此圖,作如下說明:
1、物聯網平臺作為中間元件,主要是通過訊息隊MNS列來實現裝置和企業伺服器對話的,具體可描述為:
1.1、裝置傳送指令至物聯網平臺的MNS佇列,MNS佇列將裝置指令收錄,需要說明的是:裝置傳送指令是通過嵌入式開發人員開發的,例如C語言
1.2、企業通過C#、JAVA、PHP等高階語言開發人員開發監聽程式,當監聽到MNS佇列中的裝置指令時,獲取指令,做相關業務處理,併發送新的裝置指令至MNS佇列。【例如傳送快遞櫃關門的指令】
1.3、企業傳送的指令被MNS收錄,裝置同樣通過監聽程式獲取企業伺服器傳送的關門指令,收到關門指令的裝置執行相關指令,完成自動關門操作。
以上便是裝置與企業伺服器之間的對話過程
下面列出C#的監聽MNS程式碼【需要MNS C# JDK 的支援】
using Aliyun.MNS; using Aliyun.MNS.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;View Codenamespace MnsListener { class Program { #region Private Properties private const string _accessKeyId = "MNS的keyID"; private const string _secretAccessKey = "MNS的_secretAccessKey"; private const string _endpoint = "MNS的URL"; private const string _stsToken = null; private const string _queueName = "Sub"; private const string _queueNamePrefix = "my"; private const int _receiveTimes = 1; private const int _receiveInterval = 2; private const int batchSize = 6; private static string _receiptHandle; #endregion static void Main(string[] args) { while (true) { try { IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint, _stsToken); var nativeQueue = client.GetNativeQueue(_queueName); for (int i = 0; i < _receiveTimes; i++) { var receiveMessageResponse = nativeQueue.ReceiveMessage(3); Console.WriteLine("Receive message successfully, status code: {0}", receiveMessageResponse.HttpStatusCode); Console.WriteLine("----------------------------------------------------"); Message message = receiveMessageResponse.Message; Console.WriteLine("MessageId: {0}", message.Id); Console.WriteLine("ReceiptHandle: {0}", message.ReceiptHandle); Console.WriteLine("MessageBody: {0}", message.Body); Console.WriteLine("MessageBodyMD5: {0}", message.BodyMD5); Console.WriteLine("EnqueueTime: {0}", message.EnqueueTime); Console.WriteLine("NextVisibleTime: {0}", message.NextVisibleTime); Console.WriteLine("FirstDequeueTime: {0}", message.FirstDequeueTime); Console.WriteLine("DequeueCount: {0}", message.DequeueCount); Console.WriteLine("Priority: {0}", message.Priority); Console.WriteLine("----------------------------------------------------\n"); _receiptHandle = message.ReceiptHandle; nativeQueue.DeleteMessage(_receiptHandle); Thread.Sleep(_receiveInterval); } } catch (Exception ex) { Console.WriteLine("Receive message failed, exception info: " + ex.Message); } } } } }
關於MNS C# JDK下載,可以去阿里雲:https://help.aliyun.com/document_detail/32447.html?spm=a2c4g.11186623.6.633.61395f64IfHTRo
關於MNS佇列,主題,主題訂閱相關知識:https://help.aliyun.com/document_detail/34445.html?spm=a2c4g.11186623.6.542.699f38c6RO3nDS
關於阿里雲AMQP佇列接入,可以查詢:https://help.aliyun.com/document_detail/149716.html?spm=a2c4g.11186623.6.621.2cda31b4kS1zXR
關於阿里雲物聯網平臺,請查閱:https://help.aliyun.com/document_detail/125800.html?spm=a2c4g.11186623.6.542.7b0241c8o5r6PT
最後:
@天才臥龍的部落格