1. 程式人生 > 實用技巧 >C#程式碼實現阿里雲訊息服務MNS訊息監聽

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;

namespace 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); } } } } }
View Code

關於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

最後:阿里雲物聯網平臺

@天才臥龍的部落格