本文為您介紹如何將開源MQTT用戶端從其他開源MQTT服務端遷移至阿里雲的雲Message QueueTT 版服務端上。
背景資訊
雲Message QueueTT 版擁有多協議、多語言平台的開發能力,並支援裝置級許可權控制以及SSL/TLS傳輸加密,您可以不變更開源用戶端,僅通過變更存取點和許可權配置,將用戶端從開源MQTT服務端遷移至雲Message QueueTT 版上以擷取更高的安全性、穩定以及更完善的營運能力。
本文以Java語言為例,為您介紹如何變更開源用戶端SDK相關參數,以便能夠接入雲Message QueueTT 版服務端。
具體操作流程如下:
使用限制
若遷移前使用的服務端為EMQX開源服務端,則原系統Topic不可用。例如$delayed、$share等以$開頭的Topic。
步驟一:建立雲Message QueueTT 版資源
建立執行個體
登入雲Message QueueTT 版控制台,並在左側導覽列單擊实例列表。
在頂部功能表列選擇目標地區,然後在頁面左上方單擊创建实例。
在彈出的付費方式面板中,付费方式固定為包年包月,您無需設定,直接在面板左下角單擊确定。
在彈出的商品購買頁中,按需選擇您需要購買的執行個體規格,選中微Message QueueTT 版(訂用帳戶)服務合約,然後單擊立即購買。
雲Message QueueTT 版支援的執行個體類型及功能差異,請參見執行個體類型。
在確認訂單頁面,根據提示完成支付。
建立Topic
登入雲Message QueueTT 版控制台,並在左側導覽列單擊实例列表。
在頂部功能表列選擇目標地區,然後在執行個體列表中單擊執行個體名稱進入实例详情頁面。
在左側導覽列單擊Topic 管理,然後在頁面左上方,單擊创建 Topic。
在建立Topic面板中,輸入要建立的Topic名称和描述,然後在左下角單擊確定。
建立Group
登入雲Message QueueTT 版控制台,並在左側導覽列單擊实例列表。
在頂部功能表列選擇目標地區,然後在執行個體列表中單擊執行個體名稱進入实例详情頁面。
在左側導覽列單擊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代碼中的參數值修改為雲Message QueueTT 版相關的參數值。
方法 | 待更新參數 | 說明 |
| broker:雲Message QueueTT 版執行個體的存取點。 | 取值格式為:tcp:<Endpoint>:1883。Endpoint在在云消息队列 MQTT 版控制台实例详情页面的终端SDK接入点区域获取。。 取值樣本如下:tcp://mqtt-cn-******.mqtt.aliyuncs.com:1883。 |
clientId:用戶端ID。 | clientId的取值格式為<GroupID>@@@<DeviceID>。GroupID在雲Message QueueTT 版控制台建立,具體操作,請參見步驟一:建立雲Message QueueTT 版資源;DeviceID由使用者自訂。 GroupID、DeviceID以及clientId的取值規範,請參見用戶端限制。 取值樣本如下:GID_test@@@device001。 | |
| topic:雲Message QueueTT 版的Topic。 | Topic在雲Message QueueTT 版控制台建立,具體操作,請參見步驟一:建立雲Message QueueTT 版資源。 |
| UserName:用戶端鑒權時使用的訪問憑證。 | |
| Password:用戶端鑒權時使用的訪問憑證密碼。 |
步驟三:發布訂閱
參數修改完成後啟動開源SDK用戶端,將開源用戶端接入雲Message QueueTT 版服務端進行訊息收發。
相關參考
共用訂閱
如果您需要使用共用訂閱能力,可以使用雲Message QueueTT 版提供的雲端SDK。
雲端SDK可用於雲端分布式應用部署,天然支援共用訂閱,並提供訊息收發、訊息訂閱、用戶端上下線事件通知等能力,目前支援Java、Go語言的SDK。更多資訊,請參見雲端開發概述。
雲端SDK支援在雲Message QueueTT 版服務端層面進行訂閱發布,而非支援MQTT協議。