開源MQTT遷移至云消息隊列 MQTT 版
本文為您介紹如何將開源MQTT客戶端從其他開源MQTT服務端遷移至阿里云的云消息隊列 MQTT 版服務端上。
背景信息
云消息隊列 MQTT 版擁有多協議、多語言平臺的開發能力,并支持設備級權限控制以及SSL/TLS傳輸加密,您可以不變更開源客戶端,僅通過變更接入點和權限配置,將客戶端從開源MQTT服務端遷移至云消息隊列 MQTT 版上以獲取更高的安全性、穩定以及更完善的運維能力。
本文以Java語言為例,為您介紹如何變更開源客戶端SDK相關參數,以便能夠接入云消息隊列 MQTT 版服務端。
具體操作流程如下:
使用限制
若遷移前使用的服務端為EMQX開源服務端,則原系統Topic不可用。例如$delayed、$share等以$開頭的Topic。
遷移前使用過的開源MQTT客戶端必須符合MQTT 3.1.1協議。
云消息隊列 MQTT 版客戶端不支持使用自定義用戶名/密碼方式連接。如原MQTT客戶端使用自定義用戶名/密碼方式鑒權,則遷移后需要使用和自定義用戶名/密碼方式相近的一機一密或簽名認證方式。
簽名認證方式的訪問憑證在阿里云賬號下維護,一機一密認證方式的訪問憑證由設備端自行維護。更多信息,請參見鑒權概述。
步驟一:創建云消息隊列 MQTT 版資源
創建實例
登錄云消息隊列 MQTT 版控制臺,并在左側導航欄單擊實例列表。
在頂部菜單欄選擇目標地域,然后在頁面左上角單擊創建實例。
在彈出的付費方式面板中,選擇按需選擇包年包月或Serverless 按量付費,然后單擊確定。
在彈出的商品購買頁中,選擇實例類型和各計費項的規格,然后單擊立即購買。
云消息隊列 MQTT 版支持的實例類型及功能差異,請參見實例類型。
在確認訂單頁面,根據提示完成支付。
創建Topic
登錄云消息隊列 MQTT 版控制臺,并在左側導航欄單擊實例列表。
在頂部菜單欄選擇目標地域,然后在實例列表中單擊實例名稱進入實例詳情頁面。
- 在左側導航欄單擊Topic 管理,然后在頁面左上角,單擊創建 Topic。
- 在創建Topic面板中,輸入要創建的Topic名稱和描述,然后在左下角單擊確定。
創建Group
登錄云消息隊列 MQTT 版控制臺,并在左側導航欄單擊實例列表。
在頂部菜單欄選擇目標地域,然后在實例列表中單擊實例名稱進入實例詳情頁面。
- 在左側導航欄單擊Group 管理,然后在頁面左上角單擊創建 Group。
- 在創建Group面板中,輸入Group ID,然后在左下角單擊確定。
步驟二:開源SDK參數映射
引入SDK依賴
在原客戶端SDK的pom.xml文件中增加以下依賴:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.48</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-onsmqtt</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
引入簽名方法
使用簽名認證方式進行認證的客戶端,需要引入簽名算法作為mqttConnectOptions.setPassword
傳入的用戶密碼。
Tools.macSignature(clientId, secretKey).toCharArray()
具體代碼示例,請參見Demo工程。
SDK參數值修改
您需要將SDK代碼中的參數值修改為云消息隊列 MQTT 版相關的參數值。
方法 | 待更新參數 | 說明 |
| broker:云消息隊列 MQTT 版實例的接入點。 | 取值格式為:tcp:<Endpoint>:1883。Endpoint在云消息隊列 MQTT 版控制臺實例詳情頁面的終端SDK接入點區域獲取。 取值示例如下:tcp://mqtt-cn-******.mqtt.aliyuncs.com:1883。 |
clientId:客戶端ID。 | clientId的取值格式為<GroupID>@@@<DeviceID>。GroupID在云消息隊列 MQTT 版控制臺創建,具體操作,請參見步驟一:創建云消息隊列 MQTT 版資源;DeviceID由用戶自定義。 GroupID、DeviceID以及clientId的取值規范,請參見客戶端限制。 取值示例如下:GID_test@@@device001。 | |
| topic:云消息隊列 MQTT 版的Topic。 | Topic在云消息隊列 MQTT 版控制臺創建,具體操作,請參見步驟一:創建云消息隊列 MQTT 版資源。 |
| UserName:客戶端鑒權時使用的訪問憑證。 | 具體設置方法,請參見鑒權概述。 |
| Password:客戶端鑒權時使用的訪問憑證密碼。 | 具體設置方法,請參見鑒權概述。 |
步驟三:發布訂閱
參數修改完成后啟動開源SDK客戶端,將開源客戶端接入云消息隊列 MQTT 版服務端進行消息收發。
相關參考
共享訂閱
如果您需要使用共享訂閱能力,可以使用云消息隊列 MQTT 版提供的云端SDK。
云端SDK可用于云端分布式應用部署,天然支持共享訂閱,并提供消息收發、消息訂閱、客戶端上下線事件通知等能力,目前支持Java、Go語言的SDK。更多信息,請參見云端開發概述。
云端SDK支持在云消息隊列 MQTT 版服務端層面進行訂閱發布,而非支持MQTT協議。