物聯網協議的王者:MQTT
?今天跟大家聊一下物聯網協議中比較著名的協議:MQTT。
讓我們直接開始!
什么是MQTT?
- 英文全稱:Message Quueuing Telemetry Transport
- 中文術語:消息隊列遙測傳輸協議
- 一種適用于物聯網設備之間通信的簡單消息傳遞協議
- 專為帶寬受限的設備而設計
- 采用發布/訂閱通信模式
- 用于機器對機器( M2M ) 通信
- MQTT 協議基于OASIS 標準下的TCP/IP
- 被廣泛用于無線網絡通信,具有廣泛的覆蓋面,涵蓋醫療保健、汽車和其他使用物聯網應用的行業。

MQTT的歷史
MQTT 最初由 Andy Stanford-Clark 博士和 Arlen Nipper 博士于 1999 年創建,用于通過衛星連接石油管道遙測系統。
兩位發明者為未來的協議指定了幾個要求:
- 簡單的實現
- 服務質量數據交付
- 輕量級和帶寬效率
- 數據不可知
- 持續的會話
MQTT 于 2013 年在結構化信息標準促進組織 (OASIS) 下被標準化為開源,OASIS 仍然管理 MQTT 標準。

MQTT的優勢
MQTT有以下優勢:

簡單
使用 MQTT 啟動和運行起來既快速又簡單。
搭建只需要幾條命令就可以搞定,啟動也是非常快,還有專門的管理界面。

可靠
許多物聯網設備依賴無線電連接來傳輸和收集數據,這意味著連接并不總是可靠的。
MQTT 通過提供內置的 QoS 功能來減少連接問題,該功能可以將消息排隊,將它們保存在 MQTT 代理中,并讓它們等待目標設備全部設置好接受它,這降低了消息錯位的幾率,因此消息注定要到達目的地。

雙向消息傳遞
任何設備、事物或應用程序都可以發布或訂閱由 MQTT 代理處理的任何主題。
這不是單向的,比如只能發布或者只能訂閱,是既能發布又能訂閱,類似于全雙工通信。
大規模消息傳遞
由于Broker的存在,所以不管是100萬臺設備,還是100臺設備,對于MQTT都是一樣的,沒有啥壓力,因為最終消息都是傳遞到Broker中,不管多少個客戶端監聽消息,也是從Broker中拿。
MQTT工作原理
MQTT架構
MQTT 使用 PUSH/SUBSCRIBE(發布訂閱) 模型在 TCP/IP 之上運行,在 MQTT 架構中,有兩種類型的系統:
- 客戶端
- 代理

代理是客戶端與之通信的服務器,代理接收來自客戶端的通信并將這些通信發送給其他客戶端,客戶端之間不直接通信,而是連接到代理,每個客戶端可以是發布者、訂閱者或兩者兼而有之。
MQTT 是一種事件驅動的協議,沒有定期或持續的數據傳輸,這使傳輸保持在最低限度。客戶端僅在有信息要發送時發布,代理僅在新數據到達時向訂閱者發送信息。
發布/訂閱
在發布和訂閱系統中,設備可以在某個主題上發布消息,也可以訂閱特定主題以接收消息。

如圖,設備 1 在某個主題上發布消息,設備 2 訂閱了與設備 1發布的主題相同的主題,隨后設備 2 就能接收到消息。
消息
消息是設備之間交換的信息,比如一些指令,或者設備的一些信息,或者是其他需要交換的信息。

主題
如圖所示,我用一張圖一句話解釋一下:主題就是你微信訂閱公眾號的類型。

以公眾號為例,創作者是一個個發布者,公眾號的服務器是Broker,讀者是訂閱者,不同領域的發布者向不同的主題(領域)發布文章,比如瑞哥一般都是朝科技領域發布文章,那么所有讀者(訂閱者)訂閱了科技領域的都可以看到我的文章。
這個領域就可以大致理解為主題。
主題用正斜杠分隔的字符串表示,每個正斜杠表示一個主題級別。
如圖在公眾號 文章類型中科技領域創建網絡類型的主題:


注意:主題區分大小寫,兩個主題不同:

如果讀者想要看網絡方向的文章:

- 發布者在article/technology/network主題發布OSPF相關的文章
- 訂閱者訂閱了主題article/technology/network
- 發布者在主題article/technology/network上有新消息發出的時候,訂閱者都能訂閱到。
Broker 經紀人
經紀人其實就是代理。
MQTT 代理負責接收所有消息, 過濾消息, 決定誰對它們感興趣,然后將消息發布給所有訂閱的客戶端。

MQTT訂閱
MQTT 客戶端不直接相互連接,而是訂閱主題以接收消息。
要訂閱主題,客戶端必須首先向代理發送訂閱請求,SUBSCRIBE 請求可以包含多個主題,代理使用 SUBACK(確認訂閱)響應來響應 SUBSCRIBE 請求,訂閱還具有 QoS 設置,可用于降級已發布消息的 QoS。在這種情況下,消息總是以較低的 QoS 設置發布。
訂閱通配符
訂閱通配符有兩種:

單級
單級通配符替換一個主題級別:

此通配符將涵蓋以下主題:
- 文章/娛樂/網絡
- 文章/科技/網絡
- 文章/三農/網絡
- 文章/新聞/網絡
多級
多級通配符替換多個主題級別:

此通配符將涵蓋以下主題:
- 文章/娛樂/網絡
- 文章/科技/java
- 文章/三農/美食
- 文章/新聞/航天
服務質量 QoS
QoS 0(最多一次):客戶端的消息只發送一次,不管它是否已經到達代理。
QoS 1(至少一次):客戶端的消息被一遍又一遍地發送,直到代理以確認接收來響應,這可能導致消息多次到達代理。
QoS 2(恰好一次):客戶端發送一次消息,同時確保它已到達代理,QoS 2 通信需要比服務質量 0 或 1 更多的帶寬。
MQTT幾個重要的網站
- mqtt官網:https://mqtt.org/

- emqx官網:https://www.emqx.com/

總結
MQTT是一種輕量級的開放式消息傳遞協議,它為資源受限的網絡客戶端提供了一種在低帶寬環境中分發遙測信息的簡單方法,采用發布/訂閱通信模式,用于機器對機器 ( M2M ) 通信。?




























