全部產品
Search
文件中心

IoT Platform:使用MNS服務端訂閱

更新時間:Oct 25, 2024

當需要對裝置資料進行複雜或精細化處理,且單個產品下所有裝置的訊息量小於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,否則訊息會被丟棄。

計費說明

  • 裝置訊息可以轉寄到SMQ的訊息數量由裝置所屬執行個體下可用訊息轉寄TPS規格決定。公用執行個體下訊息轉寄TPS固定規格為5條/秒,不收費。企業版執行個體下訊息轉寄TPS規格採用訂用帳戶方式計費,可使用量由該執行個體下購買的訊息轉寄TPS規格量決定。具體說明,請參見計費概述

  • SMQ接收訊息會收取費用,具體計費方式,請參見計費說明

建立服務端訂閱

在物聯網平台建立MNS服務端訂閱產品和訊息類型後,會自動在當前帳號對應SMQ的同地區下建立訊息佇列。SMQ雲端SDK應用會通過監聽該訊息佇列,接收已訂閱的裝置訊息。

  1. 登入物聯網平台控制台

  2. 執行個體概覽頁簽的全部環境下,找到對應的執行個體,單擊執行個體卡片。

  3. 在左側導覽列,選擇訊息轉寄 > 服務端訂閱

  4. 服務端訂閱頁的訂閱列表頁簽下,單擊建立訂閱

  5. 建立訂閱對話方塊中,完成配置,單擊確認

    參數

    說明

    產品

    選擇訂閱訊息源裝置所屬的產品。

    訂閱類型

    選擇為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包含:

    • 裝置上報屬性資料的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}

    裝置上報升級進度

  6. 在彈出的確認對話方塊中,單擊確認

    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

訊息類型。 取值:

  • upload:裝置上報訊息。

  • status:裝置狀態變化通知。

  • topo_listfound:網關子裝置發現上報。

  • topo_lifecycle:裝置拓撲關係變更。

  • device_lifecycle:裝置生命週期變更。

  • thing_history:物模型歷史資料上報。

  • ota_event:OTA升級裝置狀態通知。

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下載和使用