前言
在前一篇 C# MQTT using MQTTnet 中,透過 ManagedMqttClient 可以接收到 mosquitto 的訊息。
可是,當我將 mosquitto 安裝在 Azure VM(20.121.35.xxx) 後,
啟動 mosquitto 服務後,從本機 Client 這卻連不到它。
解決
Firewall 設定
要在 Azure VM 中要允許 1833 Port 連入,
1.在 Network security group 設定 Inbound port rules ,
允許 TCP 1883 允許連入。
2.在 OS 控制台 Windows Defender Firewall 中的 Advanced settings 設定 Inbound Rules
設定 mosquitto 及測試
將 mosquitto 服務起動後,
可以在 Command 視窗中下 netstat -an | findstr 1883
來查看一下是否有針對 1883 Port 在 LISTENING,
內容如下,
從上圖可以發現,有針對 1883 Port 在 LISTENING,
但它只允許本機存取,因為是 127.0.0.1:1883,
必須為 0.0.0.0:1883 才會允許遠端存取。
1.調整 mosquitto.conf
新增 listener 1883,並先允許匿名存取
1 | # listener port-number [ip address/host name/unix socket path] |
- 註:目前為測試不同機器存取,請勿設定在正式環境
重啟服務後,在 Command 視窗中下 netstat -an
就可以發現,
已變成 0.0.0.0:1883 。
2.修改 MQControlCenter 專案
原本 MQControlCenter 專案 Server 固定為 localhost ,
改成從 Command 視窗中讀取使用者的輸入值,
並執行起來,
1 | using MQTTnet.Client; |
3.mosquitto_pub發佈訊息
1 | mosquitto_pub -t "home/temperature/sensor1" -m "hello world" |
4.最後在本機 Client 可以接收來自 Azure VM (MQTT Broker Server) 的訊息