物聯網平台服務端訂閱支援將裝置訊息發送至Message Service(MNS),雲端應用通過監聽MNS隊列,擷取裝置訊息。下面講解使用MNS訂閱裝置訊息的配置方法。
前提條件
如果使用RAM使用者,RAM使用者需擁有AliyunIOTAccessingMNSRole
角色許可權。
操作步驟
在物聯網平台控制台上,為產品佈建服務端訂閱,實現物聯網平台將訊息自動轉寄至MNS。
登入物聯網平台控制台。
在執行個體概覽頁簽的全部環境下,找到對應的執行個體,單擊執行個體卡片。
在左側導覽列,選擇 。
在服務端訂閱頁的訂閱列表頁簽下,單擊建立訂閱。
在建立訂閱對話方塊中,完成配置,單擊確認。
參數
說明
產品
選擇訂閱訊息源裝置所屬的產品。
訂閱類型
選擇為MNS。
推送訊息類型
服務端要訂閱的訊息類型。目前,服務端可訂閱的裝置訊息類型包括:
重要對於雲網關MQTT協議和雲網關JT/T 808協議下產品和裝置,僅支援推送裝置上報訊息、裝置狀態變化通知和裝置生命週期變更的資料。
裝置上報訊息:產品下所有裝置Topic列表中,操作許可權為發布的Topic中的訊息。
裝置上報訊息,包括裝置上報的自訂資料和物模型資料(屬性上報、事件上報、屬性設定響應和服務調用響應)。推送到服務端的物模型資料是經物聯網平台系統處理過後的資料,資料格式請參見資料格式。
例如,一個產品有3個Topic類,分別是:
/${productKey}/${deviceName}/user/get
,具有訂閱許可權。/${productKey}/${deviceName}/user/update
,具有發布許可權。/${productKey}/${deviceName}/thing/event/property/post
,具有發布許可權。
那麼,服務端訂閱會推送具有發布許可權的Topic類中的訊息,即
/${productKey}/${deviceName}/user/update
和/${productKey}/${deviceName}/thing/event/property/post
中的訊息。裝置狀態變化通知:該產品下的裝置上下線狀態變化時通知的訊息。
網關子裝置發現上報:網關將發現的子裝置資訊上報給物聯網平台。需要網關上的應用程式支援。網關產品特有訊息類型。
裝置拓撲關係變更:子裝置和網關之間的拓撲關係建立和解除訊息。網關產品特有訊息類型。
裝置生命週期變更:裝置建立、刪除、禁用、啟用等訊息。
物模型歷史資料上報:裝置上報的屬性和事件歷史資料。
OTA升級狀態通知:驗證升級包和批量升級時,裝置升級成功或失敗的事件通知。
在彈出的確認對話方塊中,單擊確認。
物聯網平台將自動建立MNS訊息佇列,名稱格式為
aliyun-iot-${productKey}
。您在配置監聽MNS隊列時,需配置為該隊列。MNS會收取費用,具體計費方式,請參見MNS計費。
說明如果刪除已建立的MNS服務端訂閱,對應的MNS隊列也會自動刪除。
配置MNS用戶端,監聽MNS隊列,以接收裝置訊息。
以下樣本中,使用MNS Java SDK監聽訊息。
下載MNS SDK Demo,請訪問MNS文檔。
在pom.xml檔案中,添加如下依賴安裝MNS Java SDK。
<dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.8</version> <classifier>jar-with-dependencies</classifier> </dependency>
配置接收訊息時,需填入以下資訊。
CloudAccount account = new CloudAccount( $AccessKeyId, $AccessKeySecret, $AccountEndpoint);
填寫接收裝置訊息的邏輯。
MNSClient client = account.getMNSClient(); CloudQueue queue = client.getQueueRef("aliyun-iot-a1xxxxxx8o9"); //請輸入物聯網平台自動建立的隊列名稱。 while (true) { // 擷取訊息。 Message popMsg = queue.popMessage(10); //長輪詢等待時間為10秒。 if (popMsg != null) { System.out.println("PopMessage Body: "+ popMsg.getMessageBodyAsRawString()); //擷取原始訊息。 queue.deleteMessage(popMsg.getReceiptHandle()); //從隊列中刪除訊息。 } else { System.out.println("Continuing"); } }
運行程式,完成對MNS隊列的監聽。
啟動裝置,上報訊息。
裝置端SDK開發,請參見Link SDK文檔。
檢查雲端應用是否監聽到裝置訊息。若成功監聽,將獲得如下所示訊息代碼。
{ "messageid":" ", "messagetype":"upload", "topic":"/al12345****/device123/user/update", "payload":" ", "timestamp": " " }
參數
說明
messageid
物聯網平台產生的訊息ID。
messagetype
訊息類型。 取值:
upload:裝置上報訊息
status:裝置狀態變化通知
topo_listfound:網關子裝置發現上報
topo_lifecycle:裝置拓撲關係變更
device_lifecycle:裝置生命週期變更
thing_history:物模型歷史資料上報
ota_event:OTA升級狀態通知
topic
服務端監聽到的資訊來源的物聯網平台Topic。
payload
Base64編碼的訊息資料。
payload資料格式,請參見資料格式。
timestamp
時間戳記,以Epoch時間表示。