Mosquitto 上建立到 EMQ X 的橋接

2021-09-26 14:33:57 字數 4348 閱讀 1943

emq x 節點可以被其他型別的 mqtt 訊息中介軟體橋接,實現跨平台的訊息訂閱和傳送。本文我們以乙個配置例項來說明如何配置 mosquitto 到 emq x 的橋接。

mosquitto 是乙個小型輕量的開源 mqtt broker,由 c/c++ 語言編寫。mosquitto 採用單核心單執行緒架構,支援部署在資源有限的嵌入式裝置,接入少量 mqtt 裝置終端,並實現了 mqtt 5.0 和 3.1.1版本協議。

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

192.168.1.100

1883

mosquitto位址

監聽埠192.168.1.101

1883

配置 mosquitto 的橋接需要在安裝後修改mosquitto.conf檔案。對於每乙個橋接,需要配置的基本內容有:

新建橋接

開啟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_submosquitto_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

mosquitto庫 MQTT 移植到ARM

mqtt 訊息佇列遙測傳輸 是iso 標準 iso iec prf 20922 下基於發布 訂閱正規化的訊息協議。它工作在 tcp ip協議族上,是為硬體效能低下的遠端裝置以及網路狀況糟糕的情況下而設計的發布 訂閱型訊息協議,為此,它需要乙個訊息中介軟體 mqtt是乙個基於客戶端 伺服器的訊息發布 ...

重新建立em

進行資料庫備份,會導致em無法開啟的結果。需要重新建立em。em無法開啟的解決方案如下 也適用於其他因素造成的em無法開啟 1,進入cmd視窗 注意win7系統需用管理員身份開啟cmd視窗 2,刪除em 命令如下 emca repos drop 按照資料庫的基本資訊填寫正確的資訊 3,建立em 命令...

oracle11g手工建立EM

1.清除em相關配置 刪除db配置 emca deconfig dbcontrol db 清除repository emca repos drop 2.配置em 建立db control emca config dbcontrol db repos create 3.啟動em em中文問題解決 開啟...