全部產品
Search
文件中心

IoT Platform:使用MNS服務端訂閱

更新時間:Jun 30, 2024

物聯網平台服務端訂閱支援將裝置訊息發送至Message Service(MNS),雲端應用通過監聽MNS隊列,擷取裝置訊息。下面講解使用MNS訂閱裝置訊息的配置方法。

前提條件

如果使用RAM使用者,RAM使用者需擁有AliyunIOTAccessingMNSRole角色許可權。

操作步驟

  1. 在物聯網平台控制台上,為產品佈建服務端訂閱,實現物聯網平台將訊息自動轉寄至MNS。

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

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

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

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

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

      參數

      說明

      產品

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

      訂閱類型

      選擇為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升級狀態通知:驗證升級包和批量升級時,裝置升級成功或失敗的事件通知。

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

      物聯網平台將自動建立MNS訊息佇列,名稱格式為aliyun-iot-${productKey}。您在配置監聽MNS隊列時,需配置為該隊列。

      MNS會收取費用,具體計費方式,請參見MNS計費

      說明

      如果刪除已建立的MNS服務端訂閱,對應的MNS隊列也會自動刪除。

  2. 配置MNS用戶端,監聽MNS隊列,以接收裝置訊息。

    以下樣本中,使用MNS Java SDK監聽訊息。

    下載MNS SDK Demo,請訪問MNS文檔

    1. 在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>
    2. 配置接收訊息時,需填入以下資訊。

      CloudAccount account = new CloudAccount( $AccessKeyId, $AccessKeySecret, $AccountEndpoint);
      • $AccessKeyId$AccessKeySecret需替換為您的阿里雲帳號訪問API的基本資料。在物聯網平台控制台,滑鼠移動到您的帳號頭像上,然後單擊AccessKey管理,建立或查看AccessKey。

      • $AccountEndpoint需填寫實際的Endpoint值。在MNS控制台,單擊擷取Endpoint擷取。

    3. 填寫接收裝置訊息的邏輯。

      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"); } }
                                  
    4. 運行程式,完成對MNS隊列的監聽。

  3. 啟動裝置,上報訊息。

    裝置端SDK開發,請參見Link SDK文檔

  4. 檢查雲端應用是否監聽到裝置訊息。若成功監聽,將獲得如下所示訊息代碼。

    {
    "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時間表示。