全部產品
Search
文件中心

IoT Platform:服務端訂閱(MNS)

更新時間:Sep 15, 2024

本文介紹如何佈建服務端訂閱,將產品下的裝置狀態變化訊息推送到Simple Message Queue (formerly MNS) (SMQ)隊列中;伺服器通過監聽MNS隊列接收裝置狀態變化訊息。

前提條件

佈建服務端訂閱

首先在物聯網平台控制台建立MNS服務端訂閱,選擇要訂閱的訊息類型。

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

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

  3. 在左側導覽列,選擇裝置管理 > 產品,再單擊建立產品,建立一個氣體監測儀產品。

  4. 選擇裝置 > 添加裝置,在剛建立的氣體監測儀產品下建立裝置。

    裝置認證資訊將會用於裝置端SDK開發配置。

  5. 在左側導覽列,選擇訊息轉寄 > 服務端訂閱,然後單擊建立訂閱,建立MNS服務端訂閱。具體操作,請參見使用MNS服務端訂閱

    說明

    首次設定推送到MNS時,需單擊提示中的授權,進入RAM控制台同意授權IoT訪問MNS。

    本樣本中,選擇推送訊息類型為裝置狀態變化通知,即該產品下所有裝置的狀態變化訊息,都會被推送到MNS隊列中。

    訂閱成功後,物聯網平台會在MNS中,自動建立一個接收物聯網平台訊息的隊列。隊列名稱格式為:aliyun-iot-${yourProductKey}。您在配置MNS SDK監聽訊息時,需填入該隊列名稱。

    在訂閱列表中,單擊MNS右側的表徵圖,可查看MNS隊列名稱。

    裝置訊息訂閱

佈建服務端MNS SDK接收訊息

本樣本使用MNS Java SDK Demo。

  1. 訪問MNS Java SDK版本說明,下載sample包檔案,並解壓縮。

    本樣本使用sample包檔案為aliyun-sdk-mns-samples-1.1.9.1.zip

  2. 在IntelliJ IDEA中,匯入工程aliyun-sdk-mns-samples-1.1.9.1檔案夾。

  3. 在電腦的本地目錄C:\Users\${YourComputerUserName}下,添加一個PROPERTIES類型檔案.aliyun-mns.properties,並在檔案中輸入MNS訪問身份認證資訊,格式如下:

    說明

    Linux系統使用者目錄為/home/YOURNAME/,Windows系統使用者目錄為C:\Users\YOURNAME

    mns.accountendpoint=http://${your_accountId}.mns.${your_regionId}.aliyuncs.com
    mns.accesskeyid=${your_accesskeyid}
    mns.accesskeysecret=${your_accesskeysecret}

    參數

    說明

    accountendpoint

    您的MNS服務Endpoint。請在輕量訊息佇列(原 MNS)控制台,選擇隊列所在地區單擊隊列的詳情查看。

    accesskeyid

    您的阿里雲帳號的AccessKey ID和AccessKey Secret。

    登入物聯網平台控制台,將滑鼠移至帳號頭像上,然後單擊AccessKey管理,擷取AccessKey ID和AccessKey Secret。

    accesskeysecret

  4. src\main\java\com.aliyun.mns.sample.Queue目錄下的ComsumerDemo檔案中,配置物聯網平台自動建立的Simple Message Queue (formerly MNS)名稱。

        public static void main(String[] args) {
            CloudAccount account = new CloudAccount(
                    ServiceSettings.getMNSAccessKeyId(),
                    ServiceSettings.getMNSAccessKeySecret(),
                    ServiceSettings.getMNSAccountEndpoint());
            MNSClient client = account.getMNSClient(); //client初始化
    
            // 提取訊息
            try{
                CloudQueue queue = client.getQueueRef("aliyun-iot-a1eN7La****");// 替換為物聯網平台自動建立的隊列
                for (int i = 0; i < 10; i++)
                {
                    Message popMsg = queue.popMessage(); //長輪詢等待時間
                    if (popMsg != null){
                        System.out.println("message handle: " + popMsg.getReceiptHandle());
                        System.out.println("message body: " + popMsg.getMessageBodyAsString()); //擷取原始訊息
                        System.out.println("message id: " + popMsg.getMessageId());
                        System.out.println("message dequeue count:" + popMsg.getDequeueCount());
                        //<<to add your special logic.>>
    
                        //從隊列中刪除訊息
                        queue.deleteMessage(popMsg.getReceiptHandle());
                        System.out.println("delete message successfully.\n");
                    }
                }
            }
  5. 運行程式檔案ComsumerDemo.java

配置裝置端SDK

  1. 訪問裝置接入Link SDK,選擇Java SDK。

  2. 下載Java SDK Demo,然後解壓縮。

    說明

    下載本Demo預設您同意本軟體許可協議

  3. 在IntelliJ IDEA中,匯入工程JavaLinkKitDemo

  4. device_id檔案中,填入裝置認證資訊。

    裝置訊息訂閱

  5. src\main\java\com.aliyun.alink.devicesdk.demo目錄下的MqttSample檔案中,將publish對應的Topic配置為您的裝置Topic。

    裝置訊息訂閱

  6. src\main\java\com.aliyun.alink.devicesdk.demo目錄下的HelloWorld檔案中,填入裝置接入資訊。

    裝置接入資訊的擷取方法,請參見查看和配置執行個體終端節點資訊(Endpoint)接入地址

  7. 運行裝置串連的程式檔案:HelloWorld.java

結果驗證

裝置端SDK運行後,裝置上線訊息通過服務端訂閱發送到Simple Message Queue (formerly MNS)中。Simple Message Queue (formerly MNS)SDK從隊列中接收訊息,並同時將已接收的訊息從隊列中刪除。

下圖展示Simple Message Queue (formerly MNS)SDK接收並刪除訊息。

裝置訊息訂閱