閱讀193 返回首頁    go 英雄聯盟


服務端快速接入__快速開始_阿裏雲物聯網套件-阿裏雲

本文主要介紹了服務端如何使用IoT套件快速實現訂閱設備消息的功能。在IoT套件中主要有以下兩個使用場景:

  1. 您的服務器需要訂閱設備消息
  2. 您的服務器需要訂閱設備狀態變化通知

這兩個場景實現方式都一樣,消息會推送到某個topic,通過Iot套件規則引擎可以配置一個規則,把消息流轉到消息服務(MNS),然後您的服務器就可以使用MNS的sdk來接收消息了。功能參考 MNS

這種方式優勢是MNS可以保證消息的可靠性,避免了服務端不可用時的消息丟失,同時MNS在處理大量消息並發時有削峰填穀的作用,保證服務端不會因為突然的並發壓力導致服務不可用。

服務端訂閱步驟

  1. mns控製台創建主題
  2. iot的控製台配置規則引擎,增加消息到mns的規則
  3. 您的服務器接入mns的sdk(推薦使用queue模式訂閱)
  4. 發送一條設備消息,查看您的服務器是否收到

詳細參考以下截圖:

MNS控製台操作

MNS控製台

1.創建主題

這個主題是為了給規則引擎推送數據使用的。

創建主題

2.創建訂閱

主題創建後,還需要給這個主題創建訂閱者,這樣您的服務器以某個訂閱者身份去訂閱數據。

mns訂閱入口

主題的消息可以被多個訂閱者消費,目前幾種方式:

  1. 隊列:把topic裏消息轉到某個隊列,這樣您的服務器可以基於某個隊列監聽數據
  2. http:把topic裏消息主動通知到您的http地址(需要您部署http webserver)
  3. 郵件:參考mns文檔 郵件推送
  4. 短信:參考mns文檔短信推送

下麵以隊列方式舉例:

  • 隊列推送方式(推薦使用):

隊列推送方式

注意,訂閱名稱是您的某個隊列,如果沒有,需要到隊列裏麵創建一個。

創建隊列

創建隊列

規則引擎創建規則

iot控製台操作 iot控製台

1.創建規則

創建規則

2.編寫SQL

編寫SQL

上圖中的Topic是接收消息的IoT套件的Topic。

3.添加方法

添加方法

上圖中的主題是之前步驟中在MNS的控製台上創建的主題。

4.啟動規則

啟動規則

設備狀態通知到指定Topic(可選)

設備狀態數據發送到某個topic,這樣您的設備一旦上線便可利用規則引擎把上線下線等狀態信息發到topic。注意topic名稱和上麵規則引擎sql內的topic匹配。

配置設備狀態Topic,如何使用請參考紅框中的文字描述和上述圖片示例。配置設備狀態Topic

配置規則引擎的規則時請參考設備狀態通知數據格式。

服務端接收消息代碼示例:

以MNS的JAVA版SDK使用為例,在工程的pom.xml文件裏添加如下依賴:

  1. <dependency>
  2. <groupId>com.aliyun.mns</groupId>
  3. <artifactId>aliyun-sdk-mns</artifactId>
  4. <version>1.1.5</version>
  5. </dependency>

接收mns消息的代碼:

  1. CloudAccount account = new CloudAccount(
  2. $AccessKeyId,
  3. $AccessKeySecret,
  4. $AccountEndpoint;

AccessKeyId和AccessKeySecret是和阿裏雲賬號綁定的,在下圖所示位置獲取:獲取賬號信息

AccountEndpoint可以在MNS的控製台上獲取,如下圖所示:獲取endpoint

  1. MNSClient client = account.getMNSClient();
  2. CloudQueue queue = client.getQueueRef("queue-test"); //queue-test是之前創建的MNS隊列名
  3. while (true) {
  4. // 獲取消息
  5. Message popMsg = queue.popMessage(10); //長輪詢等待時間為10秒
  6. if (popMsg != null) {
  7. System.out.println("PopMessage Body: "
  8. + popMsg.getMessageBodyAsRawString()); //獲取原始消息
  9. queue.deleteMessage(popMsg.getReceiptHandle()); //從隊列中刪除消息
  10. } else {
  11. System.out.println("Continuing");
  12. }
  13. }

服務端發布消息測試:

以IoT套件的JAVA版SDK為例,介紹服務端如何調用API發布消息(如果您的設備已經開發好,也可以使用設備端來發送消息):

添加Maven依賴

Maven坐標:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-iot</artifactId>
  4. <version>2.0.3</version>
  5. </dependency>

依賴公共包:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>2.4.2</version>
  5. </dependency>

發布測試消息

  1. String accessKeyID = "<your AccessKeyID>";
  2. String accessKeySecret = "<your AccessKeySecret>";
  3. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyID, accessKeySecret);
  4. DefaultAcsClient client = new DefaultAcsClient(profile); //初始化SDK客戶端
  5. PubRequest pub = new PubRequest();
  6. pub.setProductKey(1234); //ProductKey
  7. pub.setMessageContent(Base64.encode("{a:1,b:2}")); // base64 String 的消息,消息是json才會觸發規則引擎
  8. pub.setTopicFullName("/1234/xxx"); //消息發送到哪個topic中,需要和規則引擎sql中topic匹配才能觸發規則
  9. pub.setQos(1); //設置Qos為1,設備如果不在線,重新上線會收到離線消息,消息最多在IotHub中保存7天
  10. PubResponse response = client.getAcsResponse(pub);
  11. System.out.println(response.getRequestId()); //當次請求的ID
  12. System.out.println(response.getSuccess()); //請求是否成功
  13. System.out.println(response.getErrorMessage()); //出錯時的錯誤信息

最後更新:2016-12-15 17:42:51

  上一篇:go 設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
  下一篇:go SDK下載__設備端接入手冊_阿裏雲物聯網套件-阿裏雲