本地MQTT協定訊息服務遠端連線教學介紹

2023-11-15 15:01:18

Mosquitto是一個開源的訊息代理,它實現了MQTT協定版本3.1和3.1.1。它可以在不同的平臺上執行,包括Windows、Linux、macOS等。mosquitto可以用於物聯網、感測器、移動應用程式等場景,提供了一種輕量級的、可靠的、基於釋出/訂閱模式的訊息傳遞機制。

MQTT協定遠端存取的好處在於它可以實現跨網路的遠端通訊,使得裝置可以在不同的地方進行控制和監控。同時,MQTT協定具有輕量級、高效、可靠等特點,可以在低頻寬、不穩定網路環境下穩定執行。此外,MQTT協定還支援多種程式語言和平臺,方便開發者進行二次開發和整合

下面介紹在Linux 中搭建Mosquitto MQTT協定訊息伺服器端,並結合Cpolar 內網穿透工具實現遠端連線!

 

1. Linux 搭建 Mosquitto

本例在centos 7系統,使用yum 一鍵安裝:

yum install mosquitto -y

 

安裝完成後,下面是一些操作Mosquitto服務命令

sudo systemctl start mosquitto     # 啟動 Mosquitto 服務
sudo systemctl stop mosquitto      # 停止 Mosquitto 服務
sudo systemctl restart mosquitto   # 重新啟動 Mosquitto 服務
sudo systemctl status mosquitto    #檢查伺服器狀態

執行啟動命令後,輸入檢視狀態,我們可以看到服務已經執行成功了,本地安裝成功了,下面安裝cpolar工具,穿透Mosquitto 服務的本地1883埠,實現遠端存取連線.

image-20231108154838984

 

2. Linux 安裝Cpolar

上面我們安裝成功了Mosquitto MQTT伺服器,下面我們在Linux安裝cpolar內網穿透工具,通過cpolar 轉發本地埠對映的公網地址,我們可以很容易實現遠端存取,而無需自己註冊域名購買雲伺服器.下面是安裝cpolar步驟

cpolar官網地址: https://i.cpolar.com/m/4Y6w

  • 使用一鍵指令碼安裝命令

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

 

  • 向系統新增服務

sudo systemctl enable cpolar

 

  • 啟動cpolar服務

sudo systemctl start cpolar

cpolar安裝成功後,在外部瀏覽器上存取Linux 的9200埠即:【http://區域網ip:9200】,使用cpolar賬號登入,登入後即可看到cpolar web 設定介面,結下來在web 管理介面設定即可

image-20230831171159175

 

3. 建立MQTT服務公網連線地址

登入cpolar web UI管理介面後,點選左側儀表盤的隧道管理——建立隧道:

  • 隧道名稱:可自定義,注意不要與已有的隧道名稱重複

  • 協定:tcp

  • 本地地址:1883 (本地預設埠)

  • 域名型別:臨時隨機TCP埠

  • 地區:選擇China VIP

點選建立

image-20231108155844792

然後開啟左側線上隧道列表,檢視剛剛建立隧道後生成的tcp地址,這個地址就是公網連線地址,我們可以在任意裝置上使用該地址進行連線

image-20231108160004729

4. 使用者端遠端連線MQTT服務

上面在cpolar中建立了 公網地址,下面我們使用MQTT使用者端工具mqttfx進行遠端連線測試,如果沒有該使用者端,可以進入官方下載:https://softblade.de/en/download-2/,下載後安裝開啟,點選設定圖示

image-20231108163808427

 

通過cpolar公網地址進行連線,Address值為公網地址,Port 值為公網地址後面對應的埠號,輸入完點選應用

image-20231108163643497

 

然後回到主介面,點選connect,燈變為綠色,表示連線成功

image-20231108163916120

我們可以測試,是否可以釋出訊息和訂閱,首先在Subscribe訂閱介面填寫一個topic 訂閱ID,然後點選按鈕Subscribe,開始訂閱

image-20231108164320230

 

然後在Publish 釋出介面,輸入同樣的topic ID,然後輸入需要釋出的訊息,點選按鈕Publish

image-20231108164627143

回到Subscribe訂閱介面,我們可以看到,成功訂閱到了該條資訊

image-20231108164722273

5. 程式碼呼叫MQTT服務

同樣 我們在程式碼層面進行連線,以Java 為例,匯入相關包

  <dependency>
          <groupId>org.eclipse.paho</groupId>
          <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
          <version>1.1.0</version>
      </dependency>

然後使用Cpolar 公網地址進行連線,輸入ClientID,向同一個topic進行釋出訊息,當然,這邊測試,地址是寫在內部,如生產環境,建議將地址進行外部設定,有助於方便後續修改

image-20231108170302838

程式執行後,我們可以看到,在使用者端Subscribe 介面工具上,看到了我們程式碼中釋出的訊息資料,也是可以連線測試成功

image-20231108170526029

 

6. 固定連線TCP公網地址

要注意的是,以上步驟使用的是隨機臨時tcp埠地址,所生成的公網地址為隨機臨時地址,該公網地址24小時內會隨機變化。我們接下來為其設定固定的TCP埠地址,該地址不會變化,設定後將無需每天重複修改地址。

設定固定tcp埠地址需要將cpolar升級到專業版套餐或以上。

保留一個固定tcp地址,登入cpolar官網,點選左側的預留,找到保留的tcp地址,我們來為我的世界保留一個固定tcp地址:

  • 地區:選擇China

  • 描述:即備註,可自定義

點選保留

image-20231108170758385

地址保留成功後,系統會生成相應的固定公網地址,將其複製下來

image-20231108170843827

 

開啟cpolar web ui管理介面,點選左側儀表盤的隧道管理——隧道列表,找到我們上面建立的TCP隧道,點選右側的編輯

image-20231108170907726

修改隧道資訊,將保留成功的固定tcp地址設定到隧道中

  • 埠型別:修改為固定tcp埠

  • 預留的tcp地址:填寫官網保留成功的地址,

點選更新

image-20231108170940383

隧道更新成功後,點選左側儀表盤的狀態——線上隧道列表,可以看到公網地址已經更新成為了固定TCP地址。

image-20231108171003955

 

7. 固定地址連線測試

固定好了地址後,程式中修改成我們固定的TCP地址進行連線,當然,這邊測試,地址是寫在內部,如生產環境,建議將地址進行外部設定,有助於方便後續修改

image-20231108171442960

可以看到接收訂閱到了傳送的訊息,一個永久不變的固定地址就設定好了

 image-20231108171506544