Mqtt協議的使用

2021-10-19 05:11:10 字數 3713 閱讀 3707

mqtt(message queuing telemetry transport,訊息佇列遙測傳輸協議),是一種基於發布/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於tcp/ip協議上,由ibm在2023年發布。mqtt最大優點在於,可以以極少的**和有限的頻寬,為連線遠端裝置提供實時可靠的訊息服務。作為一種低開銷、低頻寬占用的即時通訊協議,使其在物聯網、小型裝置、移動應用等方面有較廣泛的應用。

mqtt是乙個基於客戶端-伺服器的訊息發布/訂閱傳輸協議。mqtt協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(m2m)通訊和物聯網(iot)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療裝置、智慧型家居、及一些小型化裝置中已廣泛使用。

1. mqtt協議資料報結構

在mqtt協議中,乙個mqtt資料報由:固定頭(fixed header)、可變頭(variable header)、訊息體(payload)三部分構成。mqtt資料報結構如下:

(1)固定頭(fixed header)。存在於所有mqtt資料報中,表示資料報型別及資料報的分組類標識。包括:訊息服務質量qos等

(2)可變頭(variable header)。存在於部分mqtt資料報中,資料報型別決定了可變頭是否存在及其具體內容。

(3)訊息體(payload)。存在於部分mqtt資料報中,表示客戶端收到的具體內容。

mqtt協議實現方式

實現mqtt協議需要客戶端和伺服器端通訊完成,在通訊過程中,mqtt協議中有三種身份:發布者(publish)、**(broker)(伺服器)、訂閱者(subscribe)。其中,訊息的發布者和訂閱者都是客戶端,訊息**是伺服器,訊息發布者可以同時是訂閱者。

mqtt傳輸的訊息分為:主題(topic)和負載(payload)兩部分:

(1)topic,可以理解為訊息的型別,訂閱者訂閱(subscribe)後,就會收到該主題的訊息內容(payload);

(2)payload,可以理解為訊息的內容,是指訂閱者具體要使用的內容。

2. mqtt協議中的術語

2.1訂閱(subscription)

訂閱包含主題篩選器(topic filter)和最大服務質量(qos)。訂閱會與乙個會話(session)關聯。乙個會話可以包含多個訂閱。每乙個會話中的每個訂閱都有乙個不同的主題篩選器。

2.2會話(session)

每個客戶端與伺服器建立連線後就是乙個會話,客戶端和伺服器之間有狀態互動。會話存在於乙個網路之間,也可能在客戶端和伺服器之間跨越多個連續的網路連線。

2.3主題名(topic name)

連線到乙個應用程式訊息的標籤,該標籤與伺服器的訂閱相匹配。伺服器會將訊息傳送給訂閱所匹配標籤的每個客戶端。 系統主題:通過定義$sys開頭的主題可以檢視一些系統資訊,如客戶端連線數量等

2.4主題篩選器(topic filter)

乙個對主題名萬用字元篩選器,在訂閱表示式中使用,表示訂閱所匹配到的多個主題。

2.5負載(payload)

訊息訂閱者所具體接收的內容。

3.mqtt 協議設計原則

靈活的發布訂閱和主題設計

發布訂閱模式是傳統 client/server 模式的一種解耦方案。發布者通過 broker 與消費者之間通訊,broker 的作用是將收到的訊息通過某種過濾規則,正確地傳送給消費者。發布/訂閱模式 相對於 客戶端/伺服器模式 的好處在於:

發布者和消費者之間不必預先知道對方的存在,比如不需要預先溝通對方的 ip address 和 port

發布者和消費者之間不必同時執行。因為 broker 是一直執行的。

在 mqtt 協議裡,上面提到的 過濾規則 是 topic。比如:所有發布到 news 這個 topic 的訊息,都會被 broker **給已經訂閱了 news 的訂閱者:

上圖中訂閱者預先訂閱了 news,然後發布者向 broker 發布了一條訊息 「some msg」 並指定發布到 news 主題,broker 通過 topic 匹配,決定將這條訊息**給訂閱者。

4.訊息服務質量

為適應裝置不同的網路環境,mqtt 設計了 3 個 qos 等級,0, 1, 2:

固定頭中的標識有個訊息發布服務質量qos(quality of service),分三種:

5. mqtt的客戶端工具如下:

mqtt x

mosquito cli

mqtt.fx

mqtt explorer

mqtt box

mqtt-spy

mqtt lens

mqtt websocket toolkit

6. 開源 mqtt 伺服器如何選擇

到目前為止,比較流行的開源 mqtt 伺服器有幾個:

eclipse mosquitto

使用 c 語言實現的 mqtt 伺服器。eclipse 組織還還包含了大量的 mqtt 客戶端專案:

emq x

使用 erlang 語言開發的 mqtt 伺服器,內建強大的規則引擎,支援許多其他 iot 協議比如 mqtt-sn、 coap、lwm2m 等。

mosca

使用 node.js 開發的 mqtt 伺服器,簡單易用。

vernemq

同樣使用 erlang 開發的 mqtt 伺服器.

從支援 mqtt 5.0、穩定性、擴充套件性、集群能力等方面考慮,emq x 的表現應該是最好的:

使用 erlang otp 開發,容錯能力好 (電信領域久經考驗的語言,曾經做出過 99.9999999% 可用性的交換機裝置5)

官方有大量的擴充套件外掛程式可供擴充套件。有很多認證外掛程式,資料儲存(backend)外掛程式可供選擇。可支援各種關係型資料庫,nosql 資料庫,以及常見訊息佇列如 kafka,rabbitmq,pulsar 等

支援集群,支援節點水平擴充套件

單節點支援 2000k 併發連線

支援規則引擎和編譯碼

// 4.1 download emqx

wget
// 4.2 install

sudo dpkg -i emqx-ubuntu18.04-4.2.7-x86_64.deb
// 4.3 run

)ps:如果想檢視emqx伺服器協議,啟動成功可以通過瀏覽器訪問 將看到乙個emqx登入介面(預設的使用者名稱/密碼為admin/public,可以通過配置檔案修改)

注意:除錯時,確保**中的伺服器位址和此處一致

// 4.4 如果想關閉,終端執行:

sudo emqx stop
mqtt 入門介紹

2020 年常見 mqtt 客戶端工具比較

emqx

linux下安裝mqtt伺服器 - emqtt

MQTT協議 MQTT協議簡介

mqtt messagequeuing telemetry transport,訊息佇列遙測傳輸 是ibm開發的乙個即時通訊協議。mqtt是面向m2m和物聯網的連線協議,採用輕量級發布和訂閱訊息傳輸機制。它的設計思想是輕巧 開放 簡單 規範,因此易於實現。這些特點使得它對很多場景來說都是很好的選擇,...

MQTT協議 MQTT協議解析

協議就是通訊雙方的乙個約定,即,表示第1位傳輸的什麼 第2位傳輸的什麼 在mqtt協議中,乙個mqtt資料報由 固定頭 fixed header 可變頭 variable header 訊息體 payload 三部分構成。mqtt 資料報結構 固定頭存在於所有mqtt資料報中,其結構如下 bit76...

MQTT協議 MQTT協議簡介及協議原理

mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種基於發布 訂閱 publish subscribe 模式的 輕量級 通訊協議,該協議構建於tcp ip協議上,由ibm在1999年發布。mqtt最大優點在於,可以以極少的 和有限的頻寬,為連...