當需要對裝置資料進行複雜或精細化處理,且單個產品下所有裝置的訊息量小於1,000 QPS時,可將物聯網平台裝置訊息發送至Simple Message Queue (formerly MNS) (SMQ)消費。配置MNS服務端訂閱產品和訊息類型完成建立MNS隊列,MNS用戶端可通過監聽MNS隊列,接收裝置訊息。本文介紹使用MNS服務端訂閱裝置訊息的完整配置流程。
前提條件
背景資訊
阿里雲Simple Message Queue (formerly MNS) (SMQ)是一種高效、可靠、安全、便捷和可彈性擴充的分布式Message Service。SMQ能夠協助開發人員在應用的分布式組件之間自由地傳遞資料、通知訊息,從而構建松耦合系統。
物聯網平台支援使用的SMQ隊列模型接收裝置訊息,詳細內容,請參見隊列模型特性和隊列模型基本概念。
名詞 | 說明 |
MNS服務端訂閱 | 在物聯網平台配置MNS服務端訂閱產品和訊息類型,自動建立SMQ隊列。 |
MNS用戶端 | 在您的商務服務器中使用SMQ雲端SDK接收裝置訊息的消費端。SMQ雲端SDK開發指南,請參見SDK下載和使用。 |
訊息類型 | 根據裝置Topic訊息劃分的訊息類型。訂閱訊息類型後,該類型下對應的裝置Topic訊息才能轉寄到MNS用戶端。 訊息類型對應裝置Topic訊息,請參見下文訊息類型Topic表。 |
物聯網平台提供服務端訂閱和雲產品流轉服務,均可將裝置訊息轉寄到SMQ用戶端進行消費。對比服務端訂閱功能,雲產品流轉功能支援先指定裝置Topic和加工處理裝置資料再進行訊息轉寄。您可對比流轉方案及應用情境,選擇您業務需要的合適方案。具體內容,請參見資料流轉方案對比。雲產品流轉方式的配置方法,請參見添加待流轉的資料來源和資料轉寄到Message ServiceMNS。
使用限制
華北2(北京)、華南1(深圳)、新加坡、日本(東京)、美國(維吉尼亞)、美國(矽谷)和德國(法蘭克福)地區的企業版執行個體不支援MNS服務端訂閱。
一個產品僅可對應建立一個SMQ隊列訂閱,超出MNS服務端訂閱限制的裝置訊息不會轉寄到MNS用戶端。MNS服務端訂閱使用限制,請參見使用限制中隊列相關限制說明。
建立MNS服務端訂閱後,無論是否有訊息從物聯網平台流轉到隊列中,SMQ都會收取隊列資源佔用費。
SMQ隊列接收的每條訊息不能超過64 KB,否則訊息會被丟棄。
計費說明
建立服務端訂閱
在物聯網平台建立MNS服務端訂閱產品和訊息類型後,會自動在當前帳號對應SMQ的同地區下建立訊息佇列。SMQ雲端SDK應用會通過監聽該訊息佇列,接收已訂閱的裝置訊息。
登入物聯網平台控制台。
在執行個體概覽頁簽的全部環境下,找到對應的執行個體,單擊執行個體卡片。
在左側導覽列,選擇 。
在服務端訂閱頁的訂閱列表頁簽下,單擊建立訂閱。
在建立訂閱對話方塊中,完成配置,單擊確認。
參數
說明
產品
選擇訂閱訊息源裝置所屬的產品。
訂閱類型
選擇為MNS。
授權
單擊授權,根據頁面提示開通SMQ並授權。
說明若已開通SMQ並授權,忽略此操作。
立即授權
單擊立即授權,然後單擊同意授權,系統建立角色AliyunIOTAccessingMNSRole授權物聯網平台訪問SMQ,將訊息轉寄到SMQ。
說明若已建立角色AliyunIOTAccessingMNSRole,忽略此操作。
推送訊息類型
服務端要訂閱的訊息類型。目前,服務端可訂閱的裝置訊息類型包括:
重要對於雲網關下產品和裝置,僅支援推送裝置上報訊息、裝置狀態變化通知和裝置生命週期變更的資料。訊息轉寄Topic和資料格式的詳情說明,請參見MQTT協議的訊息通訊說明、GB/T 32960協議的訊息轉寄說明、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升級裝置狀態通知:驗證升級包和批量升級時,裝置升級成功或失敗的事件通知。
表 1. Topic說明
訊息類型
Topic說明
相關文檔
裝置上報訊息:自訂Topic
操作許可權為發布的自訂Topic。轉寄自訂資料格式訊息的Topic,與原始自訂Topic的格式相同。
裝置上報訊息:物模型資料
訊息轉寄Topic包含:
裝置上報屬性資料的Topic:
/${productKey}/${deviceName}/thing/event/property/post
。裝置上報事件數目據的Topic:
/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post
。裝置批量上報屬性資料的Topic:
/${productKey}/${deviceName}/thing/property/batch/post
。裝置批量上報事件數目據的Topic:
/${productKey}/${deviceName}/thing/event/batch/post
。裝置響應雲端命令返回訊息的Topic:
/${productKey}/${deviceName}/thing/downlink/reply/message
。
對應裝置上報未經處理資料的Topic如下:
裝置上報屬性的Topic:
/sys/${productKey}/${deviceName}/thing/event/property/post
。裝置上報事件的Topic:
/sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post
、/sys/${productKey}/${deviceName}/thing/event/${tsl.functionBlockId}:{tsl.event.identifier}/post
。裝置批量上報屬性、事件數目據的Topic:
/sys/${productKey}/${deviceName}/thing/event/property/batch/post
。裝置響應雲端命令返回訊息的Topic:
/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}_reply
裝置狀態變化通知
物聯網平台直接轉寄裝置上下線狀態變更訊息,Topic為
/as/mqtt/status/${productKey}/${deviceName}
。網關發現子裝置上報
網關裝置特有的Topic:
/${productKey}/${deviceName}/thing/list/found
,將發現的子裝置資訊上報給物聯網平台,然後進行流轉。裝置拓撲關係變更
網關裝置特有Topic:
/${productKey}/${deviceName}/thing/topo/lifecycle
,轉寄子裝置和網關之間的拓撲關係建立和解除訊息的Topic。對應裝置上報未經處理資料的Topic:
/sys/${productKey}/${deviceName}/thing/topo/change
。裝置生命週期變更
物聯網平台直接轉寄裝置建立、刪除、禁用、啟用等訊息,Topic為
/${productKey}/${deviceName}/thing/lifecycle
。物模型歷史資料上報
訊息轉寄Topic包含:
裝置上報歷史屬性資料的Topic:
/${productKey}/${deviceName}/thing/event/property/history/post
。裝置上報歷史事件數目據的Topic:
/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/history/post
。
對應裝置上報物模型歷史資料的Topic:
/sys/${productKey}/${deviceName}/thing/event/property/history/post
。OTA升級裝置狀態通知
訊息轉寄Topic包含:
裝置上報OTA升級結果的Topic:
/${productKey}/${deviceName}/ota/upgrade
。裝置上報OTA升級進度的Topic:
/${productKey}/${deviceName}/ota/progress/post
。
對應裝置上報升級進度的Topic:
/ota/device/progress/${productKey}/${deviceName}
。在彈出的確認對話方塊中,單擊確認。
SMQ中自動建立SMQ隊列,名稱格式為
aliyun-iot-${productKey}
。例如:aliyun-iot-ws4******
。說明如果在物聯網平台刪除已建立的MNS服務端訂閱,SMQ中對應的SMQ隊列也會自動被刪除。
開發消費用戶端
在物聯網平台配置MNS服務端訂閱後,需要在您的商務服務器中使用SMQ雲端SDK監聽已訂閱裝置訊息的SMQ隊列,才能實現SMQ雲端應用接收物聯網平台裝置訊息。
物聯網平台推薦使用SMQ Java SDK中隊列模型Sample的ConsumerDemo
,監聽已建立的SMQ隊列(例如:aliyun-iot-ws4******
)。
您可參考Java SDK版本說明,下載最新sample包檔案。Java SDK使用,請參見隊列使用手冊的ConsumerDemo 。
您需在ComsumerDemo
檔案中,配置物聯網平台自動建立的SMQ隊列名稱,例如:aliyun-iot-ws4******
。
CloudQueue queue = client.getQueueRef("aliyun-iot-ws4******");
接收訊息的資料格式
裝置接入物聯網平台並上報訊息(裝置端開發,請參見使用裝置端SDK接入),SMQ用戶端監聽裝置訊息成功後,會獲得如下訊息代碼:
{
"messageid":" ",
"messagetype":"upload",
"topic":"/al12345****/device123/user/update",
"payload":" ",
"timestamp": " "
}
參數 | 說明 |
messageid | 物聯網平台產生的訊息ID。 |
messagetype | 訊息類型。 取值:
|
topic | 服務端監聽到的資訊來源的物聯網平台Topic。 Topic說明,請參見上文建立服務端訂閱中的Topic說明表。 |
payload | Base64編碼的訊息資料。 裝置訊息轉寄到Simple Message Queue (formerly MNS)的Topic和payload資料格式的詳細內容,請參見資料格式。 |
timestamp | 時間戳記,以Epoch時間表示。 |
相關文檔
您可在執行個體詳情頁面,查看訊息轉寄TPS可用資源,確保裝置訊息能正常轉寄到SMQ進行消費。具體操作,請參見查看執行個體的可用資源。如果可用資源不足,可進行升配。具體內容,請參見執行個體計費的升配。
查看訊息佇列監控項,瞭解接收訊息的數量。具體操作,請參見查看隊列監控項。
您可以使用日誌管理功能將訊息佇列的訊息作業日誌推送到Log ServiceLog Service。當訊息的消費確認出現異常時,您可以通過MessageId查詢訊息軌跡等資訊,從而進行異常診斷。具體內容,請參見推送日誌到Log Service和查看日誌Log Service。
通過監聽SMQ隊列接收裝置狀態變化訊息的實踐教程,請參見服務端訂閱(MNS)樣本。
SMQ支援多語言(Python、C#、PHP等)的SDK監聽SMQ隊列。具體內容,請參見SDK下載和使用。