本文將使用Sandro先生開發的MQTTLens(直譯為「透鏡」),連接Mosquitto伺服器,練習MQTT訊息的發布與訂閱流程,本文也將說明在主題名稱中,搭配萬用字元訂閱多筆主題的方式。MQTTLens是Chrome瀏覽器的應用程式,在Chrome的線上應用程式商店搜尋“MQTT”關鍵字就找得到,請將它加入Chrome。
1. 在「Chome應用程式起動器」中,按一下MQTTLens開啟它。第一次啟動MQTTLens的畫面如下:
2. 按下Connection(連結)旁邊的+鈕,在底下的新增連結畫面中,輸入連結名稱與本機網址(127.0.0.1)或者MQTT伺服器所在的網址,其他選項沿用預設值。連結名稱是寫給我們自己看的,跟程式無關,因此可用中文命名。
3. 按下CREATE CONNECTION(建立連結)之後,將切換到如下的畫面:
訂閱與發布MQTT訊息
我們將使用MQTTLens模擬從「庭院」的DHT11感測器發布溫濕度值,假設此感測器的主題叫做:
home/yard/DHT11
而此主題的訊息是如下的JSON格式:
{“temp”:21, “humid”:24}
請依下圖設定MQTTLens的訂閱和發布主題以及發布訊息,「品質」和“Retained(是否保留)”採用預設值(相關說明請參閱下文)。
按下SUBSCRIBE(訂閱)和PUBLISH(發布)鈕之後,視窗底下的Subscriptions將列出訂閱項目以及接收到的前五筆訊息。請試著修改訊息內容,再按下PUBLISH(發布)鈕,訂閱者將立即收到新的訊息。
匹配訂閱主題
訂閱者需要向代理人提出想要訂閱的主題名稱,才能收到相關訊息。訂閱主題可以是完整的名稱,也能搭配底下+和#萬用字元,訂閱單層或者多層相關主題。
- +字元:匹配單一階層的主題名稱
- #字元:匹配多層主題名稱,這個字元只放在名稱最後。
假設MQTT的階層名稱定義如下:
訂閱者可透過下列三個敘述,一次訂閱多個主題:
井號可單獨使用,例如,“#”代表訂閱所有主題,但請避免這麼做,若MQTT代理人包含許多主題,此舉會增加網路負荷。底下的訂閱主題設置是無效的:
延伸閱讀
- MQTT教學(一):認識MQTT
- HiveMQ公司的MQTT Essentials系列文件
MQTTLens 能给个下载地址吗?国内下载不了,要是邮箱能发我最限
MQTTLens放在谷歌商店,有地址估计也下不了。不过,MQTTLens是开源项目,这里可以下载源码。
除了MQTTLens,你也可以使用其他前台,例如用Java写的开源MQTT.fx,其他替代方案请参阅HiveMQ的Seven best MQTT client tools这一篇文章。
thanks,
jeffrey
赵老师你好, 请问你这个程序范例用的MQTT协议用的是哪个服务质量等级(QoS)?
我在网上查了一下,MQTT有三个不同的服务模式:
QoS 0 最多分发一次
QoS 1 至少分发一次
QoS 2 仅分发一次
是的,请参阅《MQTT教學(五):「保留」發布訊息以及QoS品質設定》。
thanks,
jeffrey
老師您好請問目前mqttlens無法正常連線上請問是為甚麼呢? 因為之前設置的部分都是能正常連線並能使用的,但今日上午測試無法連線,還請老師幫我解答,謝謝老師
如果問題出在MQTTLens工具,建議更換使用其他MQTT前端工具,例如:
thanks,
jeffrey
請問「本機網址(127.0.0.1)或者MQTT伺服器所在的網址」在哪裡可以查得到?
如果你指的是同一區域網路的電腦,可在該電腦的命令提示字元(或macOS的終端機)執行ipconfig(或ifconfig)命令。
thanks,
jeffrey
老師您好!! 我想請問我裝的Eclipse Mosquitto是2.0.8的版本,但我依照老師的文章安裝與設定卻無法正常連線,官方的說明是說1.0版到2.0版好像有重大的變更,還請老師幫我解答,謝謝老師。
我下週安裝看看。
thanks,
jeffrey