本文介紹如何佈建服務端訂閱,將產品下的裝置狀態變化訊息推送到Simple Message Queue (formerly MNS) (SMQ)隊列中;伺服器通過監聽MNS隊列接收裝置狀態變化訊息。
前提條件
開通阿里雲產品:
準備開發環境,本樣本使用Java開發環境如下:
作業系統:Windows 10 64位
JDK版本:JDK8
整合式開發環境:IntelliJ IDEA社區版
佈建服務端訂閱
首先在物聯網平台控制台建立MNS服務端訂閱,選擇要訂閱的訊息類型。
登入物聯網平台控制台。
在執行個體概覽頁簽的全部環境下,找到對應的執行個體,單擊執行個體卡片。
在左側導覽列,選擇 ,再單擊建立產品,建立一個氣體監測儀產品。
選擇 ,在剛建立的氣體監測儀產品下建立裝置。
裝置認證資訊將會用於裝置端SDK開發配置。
在左側導覽列,選擇使用MNS服務端訂閱。 ,然後單擊建立訂閱,建立MNS服務端訂閱。具體操作,請參見
說明首次設定推送到MNS時,需單擊提示中的授權,進入RAM控制台同意授權IoT訪問MNS。
本樣本中,選擇推送訊息類型為裝置狀態變化通知,即該產品下所有裝置的狀態變化訊息,都會被推送到MNS隊列中。
訂閱成功後,物聯網平台會在MNS中,自動建立一個接收物聯網平台訊息的隊列。隊列名稱格式為:
aliyun-iot-${yourProductKey}
。您在配置MNS SDK監聽訊息時,需填入該隊列名稱。在訂閱列表中,單擊MNS右側的表徵圖,可查看MNS隊列名稱。
佈建服務端MNS SDK接收訊息
本樣本使用MNS Java SDK Demo。
訪問MNS Java SDK版本說明,下載sample包檔案,並解壓縮。
本樣本使用sample包檔案為aliyun-sdk-mns-samples-1.1.9.1.zip。
在IntelliJ IDEA中,匯入工程aliyun-sdk-mns-samples-1.1.9.1檔案夾。
在電腦的本地目錄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
在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"); } } }
運行程式檔案ComsumerDemo.java。
配置裝置端SDK
訪問裝置接入Link SDK,選擇Java SDK。
下載Java SDK Demo,然後解壓縮。
說明下載本Demo預設您同意本軟體許可協議。
在IntelliJ IDEA中,匯入工程JavaLinkKitDemo。
在device_id檔案中,填入裝置認證資訊。
在src\main\java\com.aliyun.alink.devicesdk.demo目錄下的MqttSample檔案中,將publish對應的Topic配置為您的裝置Topic。
在src\main\java\com.aliyun.alink.devicesdk.demo目錄下的HelloWorld檔案中,填入裝置接入資訊。
裝置接入資訊的擷取方法,請參見查看和配置執行個體終端節點資訊(Endpoint)。
運行裝置串連的程式檔案:HelloWorld.java。
結果驗證
裝置端SDK運行後,裝置上線訊息通過服務端訂閱發送到Simple Message Queue (formerly MNS)中。Simple Message Queue (formerly MNS)SDK從隊列中接收訊息,並同時將已接收的訊息從隊列中刪除。
下圖展示Simple Message Queue (formerly MNS)SDK接收並刪除訊息。