1. 程式人生 > >玩轉MQTT-阿里雲之MQTT使用(下)

玩轉MQTT-阿里雲之MQTT使用(下)

玩轉MQTT-阿里雲之MQTT使用(下)

摘要

       為使物聯網專案在正式使用時,能順利切換到具有高併發高負載能力的服務平臺,對阿里雲提供的MQTT服務進行使用驗證。

引言

       之前寫“MQTT之阿里雲使用-玩轉阿里雲”這篇文章時,由於時間關係(寫文章也是要花費大量時間的),打算將內容拆分為兩部分,將寫好的一部分先發了出去,打算稍後再補充後續完結內容。

       不成想,文章發出後,居然被管理員從首頁移除,嚴重打擊了本人原本不那麼強悍的內心,導致一直不太有興趣完成後續部分。

      近來翻看自己的文章,發表這篇爛尾的文章居然是自己文章中閱讀訪問量最高的一篇。雖然文章內容組織比較凌亂,表述也不夠好,在這9102年即將過去之際,還是打算來一個續篇,為自己忙忙碌碌(碌碌無為)的2019做個收尾。

MQTT服務驗證

       書接上回,我們說到了阿里雲RocketMQ、MQTT服務的開通(MQTT訊息的持久化依託MQ服務)、介紹了MQ、MQTT例項的建立,頂級Topic資源的建立,GroupID字首的建立以及RAM帳號資源的建立及帳號授權。

       一系列準備工作之後,準備開始使用MQTT訊息中介軟體服務。

訪問鑑權

       使用微訊息佇列 MQTT 的客戶端收發訊息時,服務端會根據 MQTT 客戶端設定的 Username 和 Password 引數來進行鑑權。

       阿里雲支援兩種鑑權模式

       簽名驗證:永久授權,適用於客戶端安全受信任的場景

       臨時 Token 許可權驗證:臨時授權,適用於客戶端不安全的場景

 

       具體鑑權認證的相關資料在這裡,大家可自行訪問閱讀。https://help.aliyun.com/document_detail/54225.html

 

簽名校驗

      簡單介紹一下阿里雲MQTT訪問中的簽名鑑權模式下的訪問要點

      1、 MQTT連線引數中ClientId必須以GroupID為字首,以@@@作為連線符,連線自定義的客戶ID

      2、 MQTT連線引數中Username由鑑權模式名稱、AccessKey、InstanceId 三部分組成,以 “|” 分隔。

      3、 MQTT連線引數中Password是用AccessKey對應的AccessKeySecret對ClientId使用 HMAC-SHA1 方法進行簽名計算得到一個二進位制陣列,再對該二進位制陣列做 Base64 編碼得到最終的 Password 簽名字串。

 

      簽名校驗資料網址如下:https://help.aliyun.com/document_detail/48271.html

 

      阿里雲MQTT服務管理頁面中,提供了一個線上的JS版本的簽名校驗驗證計算頁面,用於驗證各位自行實現的校驗演算法是否正確。

 

 

MQTT連線測試

讓我們調出Paho神器,來一場說連就連的測試

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.0.2/

https://www.eclipse.org/paho/downloads.php

 

 

      如上圖,先建立MQTT連線,填入伺服器地址及埠,填入客戶機標識(ClientId)

 

 

      在MQTT連線選項中,勾選開啟登入,填寫使用者名稱、密碼

 

 

 

      點選連線,正常情況下,即可成功連線並登入到阿里雲MQTT伺服器。

      筆者基於C#,使用開源MQTTnet的Nuget包,也實現了一個簡單的MQTT客戶端。我們用這個客戶端進行連線測試,效果如下圖。

 

訊息消費

      MQTT是基於二進位制訊息的釋出/訂閱程式設計模式的訊息協議。

      要使用MQTT進行通訊,就需要有釋出者和消費者。釋出者通過釋出主題訊息傳遞資訊,接收者通過訂閱對應的主題接收和消費資訊。

訂閱主題

 

      MQTT客戶端與MQTT伺服器建立連線之後,我們即可以進行訊息訂閱和訊息釋出。

釋出主題

      我們使用上文中建立的頂級主題建立一個帶有萬用字元的訂閱主題。

      注意,MQTT允許使用萬用字元訂閱主題,但是並不允許使用萬用字元廣播。

 

 

 

       我們建立一個頂級主題下帶有城市和釋出者編號的主題,釋出一條訊息,Payload中攜帶一個json格式的狀態資訊和座標資訊。

       點擊發布,可以看到上圖中,接收框中,成功接收到訂閱主題下的訊息。(操作中釋出了二條訊息)。

 

       使用Paho測試訊息釋出/訂閱,效果相同。

 

       一個釋出者釋出的訊息,可以被多個訂閱者接收。

       至此,阿里雲MQTT服務使用介紹完畢。

 

      <<<玩轉MQTT-阿里雲之MQTT使用(上