目錄
1. Linux 搭建 Mosquitto
2. Linux 安裝Cpolar
3. 創建MQTT服務公網連接地址
4. 客戶端遠程連接MQTT服務
5. 代碼調用MQTT服務
6. 固定連接TCP公網地址
7. 固定地址連接測試
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
端口,實現遠程訪問連接.
2. Linux 安裝Cpolar
上面我們安裝成功了Mosquitto MQTT服務器,下面我們在Linux安裝cpolar內網穿透工具,通過cpolar 轉發本地端口映射的公網地址,我們可以很容易實現遠程訪問,而無需自己注冊域名購買云服務器.下面是安裝cpolar步驟
cpolar官網地址: https://www.cpolar.com
- 使用一鍵腳本安裝命令
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 管理界面配置即可
3. 創建MQTT服務公網連接地址
登錄cpolar web UI管理界面后,點擊左側儀表盤的隧道管理——創建隧道:
- 隧道名稱:可自定義,注意不要與已有的隧道名稱重復
- 協議:tcp
- 本地地址:1883 (本地默認端口)
- 域名類型:臨時隨機TCP端口
- 地區:選擇China VIP
點擊創建
然后打開左側在線隧道列表,查看剛剛創建隧道后生成的tcp地址,這個地址就是公網連接地址,我們可以在任意設備上使用該地址進行連接
4. 客戶端遠程連接MQTT服務
上面在cpolar中創建了 公網地址,下面我們使用MQTT客戶端工具mqttfx進行遠程連接測試,如果沒有該客戶端,可以進入官方下載:https://softblade.de/en/download-2/,下載后安裝打開,點擊設置圖標
通過cpolar公網地址進行連接,Address值為公網地址,Port 值為公網地址后面對應的端口號,輸入完點擊應用
然后回到主界面,點擊connect,燈變為綠色,表示連接成功
我們可以測試,是否可以發布消息和訂閱,首先在Subscribe訂閱界面填寫一個topic 訂閱ID,然后點擊按鈕Subscribe,開始訂閱
然后在Publish 發布界面,輸入同樣的topic ID,然后輸入需要發布的消息,點擊按鈕Publish
回到Subscribe訂閱界面,我們可以看到,成功訂閱到了該條信息
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進行發布消息,當然,這邊測試,地址是寫在內部,如生產環境,建議將地址進行外部配置,有助于方便后續修改
程序運行后,我們可以看到,在客戶端Subscribe 界面工具上,看到了我們代碼中發布的消息數據,也是可以連接測試成功
6. 固定連接TCP公網地址
要注意的是,以上步驟使用的是隨機臨時tcp端口地址,所生成的公網地址為隨機臨時地址,該公網地址24小時內會隨機變化。我們接下來為其配置固定的TCP端口地址,該地址不會變化,設置后將無需每天重復修改地址。
配置固定tcp端口地址需要將cpolar升級到專業版套餐或以上。
保留一個固定tcp地址,登錄cpolar官網,點擊左側的預留,找到保留的tcp地址,我們來為我的世界保留一個固定tcp地址:
- 地區:選擇China
- 描述:即備注,可自定義
點擊保留
地址保留成功后,系統會生成相應的固定公網地址,將其復制下來
打開cpolar web ui管理界面,點擊左側儀表盤的隧道管理——隧道列表,找到我們上面創建的TCP隧道,點擊右側的編輯
修改隧道信息,將保留成功的固定tcp地址配置到隧道中
- 端口類型:修改為固定tcp端口
- 預留的tcp地址:填寫官網保留成功的地址,
點擊更新
隧道更新成功后,點擊左側儀表盤的狀態——在線隧道列表,可以看到公網地址已經更新成為了固定TCP地址。
7. 固定地址連接測試
固定好了地址后,程序中修改成我們固定的TCP地址進行連接,當然,這邊測試,地址是寫在內部,如生產環境,建議將地址進行外部配置,有助于方便后續修改
可以看到接收訂閱到了發送的消息,一個永久不變的固定地址就設置好了