[MQTT | Mosquitto]_設定Mosquitto Bridge與多重Bridge測試
最近論文題目訂下來跟MQTT Broker有關
其中一個項目需要用到Mosquitto Bridge功能,因此來測試一下
不過相對的文章有點少,而且官方的Spec也有點舊了,一不小心看錯舊資料還鬼打牆許久
所以整理記錄下來備忘~~
這次測試的Mosquitto版本為1.3.4
測試使用一片RP3, 一片RP2, 一台VM
測試時修改完mosquitto.conf時,記得sudo service mosquitto restart,以便重新load conf
設定Mosquitto Bridge,使RPI3 Bridge至RPI2
在RPI3上/etc/mosquitto/mosquitto.conf內更改幾個參數:
# Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example pid_file /var/run/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ connection RP2 address 192.168.1.81:1883 cleansession false clientid RP3 start_type automatic topic # both 0 bgtest/ bgtest/ log_dest file /var/log/mosquitto/mosquitto.log log_type debug include_dir /etc/mosquitto/conf.d connection #接你要bridge的別名,可以隨便取 address #接要bridge的broker ip與port clientid #接此broker要讓別的broker在log識別連線的名稱,可以隨便取,也可以不要設定 start_type automatic #自動讓Bridge啟動 topic # both 0 bgtest/ bgtest/ #代表雙向能夠透過bgtest這個topic互相傳送資料 log_type debug #設定為debug模式以便順利看log偵錯
之後先啟動RPI2再啟動RPI3的mosquitto。
各自訂閱自身所有的topic,以便偵錯:
mosquitto_sub -t “#” -v
然後在RPI3往自己的broker發送訊息,看一下RPI2有沒有收到:
其實bridge就是讓RPI3會去RPI2訂閱/發布一個在設定檔內設定的Bridge topic,
而這個bridge可以設定是單向或雙向,利用http://owntracks.org/booklet/guide/bridge/中舉的例子:
topic nexus7 in 2 owntracks/jane/ owntracks/jane/
topic iphone out 2 owntracks/john/ owntracks/john/
則若從 owntracks/johne/iphone這個topic發進來的東西,會由被橋接的broker使用topic名為owntracks/jane/nexus7出去,而2代表QOS
而下列例子則可以代表一個被bridge的broker,
第一行會將本地端的topic名稱轉換成mqttitude傳到被bridge的broker去
第二行將外部發送到名為mqttitude/這個topic,轉送到本地端的owntracks/
topic # out 2 owntracks/ mqttitude/
topic # in 2 owntracks/ mqttitude/
還有很多種變化形態,可參考manual:http://mosquitto.org/man/mosquitto-conf-5.html
另外broker啟動時會有若干秒的bridge橋接延遲,之後在訊息傳送上不會有延遲,
若另一個broker遲遲無法收到訊息,請觀察/var/log/mosquitto/mosquitto.log的內容
設定Multiple Bridge
這個想法其實很單純,因為一個Broker只能Bridge另外一個Broker,但被Bridge的Broker仍然能夠Bridge其他Broker
因此可以逐一往下一個Broker做Bridge,已達成類似Cluster Bridge的效果
在RPI2上的mosquitto.conf設定下一個Bridge的對象即可,視情況調整topic轉換的參數
我這邊示範在RPI3,2上的topic皆使用topic # both 0 bgtest/ bgtest/
不過可以看到會有訊息又被丟回來的情況發生,因此可能在topic設定方向上還得花點心思去調整。
標準的sync作法請參考:https://stackoverflow.com/questions/26280208/cluster-forming-with-mosquitto-broker/36377681#36377681
但透過bridge達到這種功能,會造成過多的overhead,還是推薦使用原生有cluster功能的Broker(像Verne MQ, Active MQ等)
Thx for:
http://cgoder.github.io/2015/05/18/mosquitto-bridge-%E6%A1%A5%E6%8E%A5%E8%AE%BE%E7%BD%AE/
http://jpmens.net/2013/02/25/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker/
http://omaticlabs.com/homepage/26/adventures-in-bridging-mosquitto-brokers-part-1
最後此篇需紀念一位素未謀面的網友 Swin Lai,先前來問我MQTT的問題,在討論過程中我才知道mosquitto可以透過bridge達到這件事情。
而他於今年2016/2月份於泰國交通意外離開人世,願他在另一個國度能夠安詳長眠。
Leave a comment
很抱歉,必須登入網站才能發佈留言。