物聯網協(xié)議的王者:MQTT
?今天跟大家聊一下物聯網協(xié)議中比較著名的協(xié)議:MQTT。
讓我們直接開始!
什么是MQTT?
- 英文全稱:Message Quueuing Telemetry Transport
- 中文術語:消息隊列遙測傳輸協(xié)議
- 一種適用于物聯網設備之間通信的簡單消息傳遞協(xié)議
- 專為帶寬受限的設備而設計
- 采用發(fā)布/訂閱通信模式
- 用于機器對機器( M2M ) 通信
- MQTT 協(xié)議基于OASIS 標準下的TCP/IP
- 被廣泛用于無線網絡通信,具有廣泛的覆蓋面,涵蓋醫(yī)療保健、汽車和其他使用物聯網應用的行業(yè)。
MQTT的歷史
MQTT 最初由 Andy Stanford-Clark 博士和 Arlen Nipper 博士于 1999 年創(chuàng)建,用于通過衛(wèi)星連接石油管道遙測系統(tǒng)。
兩位發(fā)明者為未來的協(xié)議指定了幾個要求:
- 簡單的實現
- 服務質量數據交付
- 輕量級和帶寬效率
- 數據不可知
- 持續(xù)的會話
MQTT 于 2013 年在結構化信息標準促進組織 (OASIS) 下被標準化為開源,OASIS 仍然管理 MQTT 標準。
MQTT的優(yōu)勢
MQTT有以下優(yōu)勢:
簡單
使用 MQTT 啟動和運行起來既快速又簡單。
搭建只需要幾條命令就可以搞定,啟動也是非常快,還有專門的管理界面。
可靠
許多物聯網設備依賴無線電連接來傳輸和收集數據,這意味著連接并不總是可靠的。
MQTT 通過提供內置的 QoS 功能來減少連接問題,該功能可以將消息排隊,將它們保存在 MQTT 代理中,并讓它們等待目標設備全部設置好接受它,這降低了消息錯位的幾率,因此消息注定要到達目的地。
雙向消息傳遞
任何設備、事物或應用程序都可以發(fā)布或訂閱由 MQTT 代理處理的任何主題。
這不是單向的,比如只能發(fā)布或者只能訂閱,是既能發(fā)布又能訂閱,類似于全雙工通信。
大規(guī)模消息傳遞
由于Broker的存在,所以不管是100萬臺設備,還是100臺設備,對于MQTT都是一樣的,沒有啥壓力,因為最終消息都是傳遞到Broker中,不管多少個客戶端監(jiān)聽消息,也是從Broker中拿。
MQTT工作原理
MQTT架構
MQTT 使用 PUSH/SUBSCRIBE(發(fā)布訂閱) 模型在 TCP/IP 之上運行,在 MQTT 架構中,有兩種類型的系統(tǒng):
- 客戶端
- 代理
代理是客戶端與之通信的服務器,代理接收來自客戶端的通信并將這些通信發(fā)送給其他客戶端,客戶端之間不直接通信,而是連接到代理,每個客戶端可以是發(fā)布者、訂閱者或兩者兼而有之。
MQTT 是一種事件驅動的協(xié)議,沒有定期或持續(xù)的數據傳輸,這使傳輸保持在最低限度。客戶端僅在有信息要發(fā)送時發(fā)布,代理僅在新數據到達時向訂閱者發(fā)送信息。
發(fā)布/訂閱
在發(fā)布和訂閱系統(tǒng)中,設備可以在某個主題上發(fā)布消息,也可以訂閱特定主題以接收消息。
如圖,設備 1 在某個主題上發(fā)布消息,設備 2 訂閱了與設備 1發(fā)布的主題相同的主題,隨后設備 2 就能接收到消息。
消息
消息是設備之間交換的信息,比如一些指令,或者設備的一些信息,或者是其他需要交換的信息。
主題
如圖所示,我用一張圖一句話解釋一下:主題就是你微信訂閱公眾號的類型。
以公眾號為例,創(chuàng)作者是一個個發(fā)布者,公眾號的服務器是Broker,讀者是訂閱者,不同領域的發(fā)布者向不同的主題(領域)發(fā)布文章,比如瑞哥一般都是朝科技領域發(fā)布文章,那么所有讀者(訂閱者)訂閱了科技領域的都可以看到我的文章。
這個領域就可以大致理解為主題。
主題用正斜杠分隔的字符串表示,每個正斜杠表示一個主題級別。
如圖在公眾號 文章類型中科技領域創(chuàng)建網絡類型的主題:
注意:主題區(qū)分大小寫,兩個主題不同:
如果讀者想要看網絡方向的文章:
- 發(fā)布者在article/technology/network主題發(fā)布OSPF相關的文章
- 訂閱者訂閱了主題article/technology/network
- 發(fā)布者在主題article/technology/network上有新消息發(fā)出的時候,訂閱者都能訂閱到。
Broker 經紀人
經紀人其實就是代理。
MQTT 代理負責接收所有消息, 過濾消息, 決定誰對它們感興趣,然后將消息發(fā)布給所有訂閱的客戶端。
MQTT訂閱
MQTT 客戶端不直接相互連接,而是訂閱主題以接收消息。
要訂閱主題,客戶端必須首先向代理發(fā)送訂閱請求,SUBSCRIBE 請求可以包含多個主題,代理使用 SUBACK(確認訂閱)響應來響應 SUBSCRIBE 請求,訂閱還具有 QoS 設置,可用于降級已發(fā)布消息的 QoS。在這種情況下,消息總是以較低的 QoS 設置發(fā)布。
訂閱通配符
訂閱通配符有兩種:
單級
單級通配符替換一個主題級別:
此通配符將涵蓋以下主題:
- 文章/娛樂/網絡
- 文章/科技/網絡
- 文章/三農/網絡
- 文章/新聞/網絡
多級
多級通配符替換多個主題級別:
此通配符將涵蓋以下主題:
- 文章/娛樂/網絡
- 文章/科技/java
- 文章/三農/美食
- 文章/新聞/航天
服務質量 QoS
QoS 0(最多一次):客戶端的消息只發(fā)送一次,不管它是否已經到達代理。
QoS 1(至少一次):客戶端的消息被一遍又一遍地發(fā)送,直到代理以確認接收來響應,這可能導致消息多次到達代理。
QoS 2(恰好一次):客戶端發(fā)送一次消息,同時確保它已到達代理,QoS 2 通信需要比服務質量 0 或 1 更多的帶寬。
MQTT幾個重要的網站
- mqtt官網:https://mqtt.org/
- emqx官網:https://www.emqx.com/
總結
MQTT是一種輕量級的開放式消息傳遞協(xié)議,它為資源受限的網絡客戶端提供了一種在低帶寬環(huán)境中分發(fā)遙測信息的簡單方法,采用發(fā)布/訂閱通信模式,用于機器對機器 ( M2M ) 通信。?