[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有沒有收到:2016-05-01_15-34-51

 

 

其實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

2016-05-01_15-46-14

 

而下列例子則可以代表一個被bridge的broker,

第一行會將本地端的topic名稱轉換成mqttitude傳到被bridge的broker去

第二行將外部發送到名為mqttitude/這個topic,轉送到本地端的owntracks/

topic # out 2 owntracks/ mqttitude/
topic # in 2 owntracks/ mqttitude/

2016-05-01_15-57-08

 

還有很多種變化形態,可參考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/

2016-05-01_16-07-44

 

不過可以看到會有訊息又被丟回來的情況發生,因此可能在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月份於泰國交通意外離開人世,願他在另一個國度能夠安詳長眠。

1 Trackback / Pingback

  1. MQTT & javascrip – rexinblog

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料