EMQ X 節點能夠被其餘類型的 MQTT 消息中間件橋接,實現跨平臺的消息訂閱和發送。本文咱們以一個配置實例來講明如何配置 Mosquitto 到 EMQ X 的橋接。服務器
Mosquitto 是一個小型輕量的開源 MQTT Broker,由 C/C++ 語言編寫。Mosquitto 採用單核心單線程架構,支持部署在資源有限的嵌入式設備,接入少許 MQTT 設備終端,並實現了 MQTT 5.0 和 3.1.1版本協議。session
EMQ X 與 Mosquitto 均完整支持了 MQTT 協議特性,但 EMQ X 支持更多通訊協議以及私有協議接入。應用層的功能拓展方面,Mosquitto 缺少開箱即用的如認證鑑權、規則引擎、數據持久化與高性能消息橋接(EMQ X 企業版)等業務相關功能; 監控運維與可視化管理方面, EMQ X 有完整的現有功能和拓展方案支持;基礎功能上 Mosquitto 集羣功能羸弱,官方和第三方實現的集羣方案均難以支撐物聯網大規模海量鏈接的性能需求。架構
所以 Mosquitto 不適合用來作規模化服務的 MQTT Broker,但因爲其足夠輕量精簡,能夠運行在任何低功率單片機包括嵌入式傳感器、手機設備、嵌入式微處理器上,在物聯網邊緣消息接入上是較好的技術選型,結合橋接功能可以實現消息的本地處理並透傳至雲端。運維
假設咱們有一臺 EMQ X 服務器 'emqx1',和一臺 Mosquitto 服務器,咱們須要在 Mosquitto 上建立一條橋接,把全部 "傳感器(sensor)" 主題消息轉發至 'emqx1' 服務器,並從 EMQ X 訂閱全部"控制(control)"主題。工具
EMQ X性能
節點 | 節點名 | 監聽端口 |
---|---|---|
emqx1 | emqx1@192.168.1.100 | 1883 |
Mosquitto測試
地址 | 監聽端口 |
---|---|
192.168.1.101 | 1883 |
配置 Mosquitto 的橋接須要在安裝後修改 mosquitto.conf
文件。對於每個橋接,須要配置的基本內容有:ui
新建橋接spa
打開 mosquitto.conf
文件,增長一個 connection
以創建一個新的橋接,connection
關鍵字後的字符串同時也是遠端節點上使用的client id:線程
connection emqx1
配置橋接遠端節點的地址和端口
address 192.168.1.100:1883
配置協議版本
Mosquitto橋接使用的 MQTT 協議版本默認爲3.1,要使用3.1.1協議須要在配置中指定。
bridge_protocol_version mqttv311
配置遠端節點用戶名
remote_username user
配置遠端節點密碼
remote_password passwd
指定須要橋接的主題 橋接主題的配置格式爲 topic 主題模式 方向 QoS 本地前綴 遠端前綴
,它定義了橋接轉發和接收的規則。其中:
如下配置例添加了兩條橋接規則:
topic sensor/# out 1 topic control/# in 1
在配置完成後,須要從新啓動Mosquitto使橋接配置生效。
在安裝 EMQ X 服務器後,爲了使 Mosquitto 橋接能夠接入,須要視狀況決定是否配置相應的用戶認證和鑑權信息。或者在實驗階段爲了簡化測試,可使用容許匿名登陸和 acl_nomatch 跳過認證和鑑權。
咱們使用 mosquitto_sub
和 mosquitto_pub
工具來測試橋接的配置是否成功。
在'emqx1'上訂閱訂閱'sensor/#'主題,該主題將接收到 Mosquitto 上報的數據:
$ mosquitto_sub -t "sensor/#" -p 1883 -d -q 1 -h 192.168.1.100 Client mosqsub|19324-Zeus- sending CONNECT Client mosqsub|19324-Zeus- received CONNACK Client mosqsub|19324-Zeus- sending SUBSCRIBE (Mid: 1, Topic: sensor/#, QoS: 1) Client mosqsub|19324-Zeus- received SUBACK Subscribed (mid: 1): 1
在Mosquitto上發佈消息:
mosquitto_pub -t "sensor/1/temperature" -m "37.5" -d -h 192.168.1.101 -q 1 Client mosqpub|19325-Zeus- sending CONNECT Client mosqpub|19325-Zeus- received CONNACK Client mosqpub|19325-Zeus- sending PUBLISH (d0, q1, r0, m1, 'sensor/1/temperature', ... (4 bytes)) Client mosqpub|19325-Zeus- received PUBACK (Mid: 1) Client mosqpub|19325-Zeus- sending DISCONNECT
在'emqx1'上應能收到該消息:
Client mosqsub|19324-Zeus- received PUBLISH (d0, q1, r0, m1, 'sensor/1/temperature', ... (4 bytes)) Client mosqsub|19324-Zeus- sending PUBACK (Mid: 1) 37.5
在 Mosquitto上訂閱 'control/#' 主題,該主題將接收到 EMQ X 上發佈的消息:
$ mosquitto_sub -t "control/#" -p 1883 -d -q 1 -h 192.168.1.101 Client mosqsub|19338-Zeus- sending CONNECT Client mosqsub|19338-Zeus- received CONNACK Client mosqsub|19338-Zeus- sending SUBSCRIBE (Mid: 1, Topic: control/#, QoS: 1) Client mosqsub|19338-Zeus- received SUBACK Subscribed (mid: 1): 1
在 'emqx1'上發佈消息,消息將在 'emqx1' 上傳遞,同時橋接到 Mosquitto 本地:
$ mosquitto_pub -t "control/1" -m "list_all" -d -h 192.168.1.100 -q 1 Client mosqpub|19343-Zeus- sending CONNECT Client mosqpub|19343-Zeus- received CONNACK Client mosqpub|19343-Zeus- sending PUBLISH (d0, q1, r0, m1, 'control/1', ... (8 bytes)) Client mosqpub|19343-Zeus- received PUBACK (Mid: 1) Client mosqpub|19343-Zeus- sending DISCONNECT
在Mosquitto上應能收到該消息:
Client mosqsub|19338-Zeus- received PUBLISH (d0, q1, r0, m2, 'control/1', ... (8 bytes)) Client mosqsub|19338-Zeus- sending PUBACK (Mid: 2) list_all