帶你了解MQTT協(xié)議
作者 | 王映月,單位:中國移動智慧家庭運營中心
?Labs 導(dǎo)讀
目前MQTT協(xié)議被廣泛應(yīng)用于自動駕駛、工業(yè)、通信等領(lǐng)域。而在智能家居領(lǐng)域市場上,中國移動、華為、阿里、騰訊等多家IoT平臺都支持MQTT協(xié)議接入。本文將詳細介紹MQTT協(xié)議的特點、如何運作等相關(guān)問題。
MQTT是結(jié)構(gòu)化信息標(biāo)準(zhǔn)促進組織(OASIS,Organization for the Advancement of Structured Information Standards)標(biāo)準(zhǔn)下的物聯(lián)網(wǎng)消息傳遞協(xié)議,其輕量級的發(fā)布/訂閱傳輸機制,非常適合為遠程連接設(shè)備提供可靠的消息通信服務(wù)。目前MQTT協(xié)議被廣泛應(yīng)用于自動駕駛、工業(yè)、通信等領(lǐng)域。而在智能家居領(lǐng)域市場上中國移動、華為、阿里、騰訊等多家IoT平臺都支持MQTT協(xié)議接入。
Part 01MQTT協(xié)議的特點
- 輕量高效
只需極少的資源即可實現(xiàn)MQTT客戶端,這使得MQTT協(xié)議可以輕松地在微型芯片上運行。極簡報文設(shè)置實現(xiàn)最小網(wǎng)絡(luò)開銷。
- 范圍廣播
輕松實現(xiàn)百萬設(shè)備消息廣播。
- 穩(wěn)定傳輸
3種消息傳輸保障等級,提供不同場景下消息傳遞的可靠性保證。
- 弱網(wǎng)支持
會話保持機制減少弱網(wǎng)環(huán)境下設(shè)備重連時間。
- 安全保障
支持多種認證協(xié)議保障消息安全
Part 02MQTT協(xié)議是怎么工作的 ●
MQTT協(xié)議定義了消息代理節(jié)點(Broker)及MQTT客戶端(Client),兩種網(wǎng)絡(luò)實體類型。Broker接收Client發(fā)送的消息并負責(zé)轉(zhuǎn)發(fā)這些消息到指定的Client。Client是能與Broker產(chǎn)生交互的任何實體,負責(zé)發(fā)送與接收消息。常見的Client比如IoT傳感器,云端服務(wù)器??梢娫贛QTT協(xié)議中消息是通過Broker進行轉(zhuǎn)發(fā)的,而不是由一個Client與另一個Client直接連接通信。為了區(qū)分,我們可以把Client定義為消息發(fā)送者(Publisher-Client)與消息接收者(Subscriber-Client)。
- Client與Broker建立連接,該連接可以是一個TCP/IP連接,也可以是一個加密的TLS連接。
- Subscriber-Client訂閱一個主題(Topic)。
- Publisher-Client發(fā)送某個Topic消息到Broker。
- Broker將該條消息轉(zhuǎn)發(fā)給所有訂閱該Topic的Subscriber-Client。
Part 03MQTT協(xié)議質(zhì)量保障
眾所周知,物聯(lián)網(wǎng)設(shè)備往往處在復(fù)雜的網(wǎng)絡(luò)環(huán)境下,比如農(nóng)業(yè)物聯(lián)網(wǎng)中,蔬菜大棚的傳感器設(shè)備;工業(yè)物聯(lián)網(wǎng)中,封閉車間的溫濕度傳感器等等。在這些復(fù)雜網(wǎng)絡(luò)場景下,設(shè)備狀態(tài)是無法確定的,為了在這些場景下保障連接,MQTT協(xié)議提供了消息服務(wù)質(zhì)量保障等級(Qos,Quality of Service levels)。
- Qos-0最多一次
Qos 0 保障消息到達終點最多不超過1次。消息可能到達1次或根本不會到達。適用于功率受限設(shè)備,可以最大減少傳播時間,減少消息傳遞成本;適用于非關(guān)鍵消息傳遞,例如被頻繁重復(fù)發(fā)送的消息。
- Qos-1 最少一次
Qos 1保障消息到達終點最少不低于1次。Broker在確認接收消息后會返回一個PUBACK消息給到Publisher-Client。如果消息發(fā)送失敗,Publisher-Client將在一段時間后重發(fā)消息。此類型消息適用于重要不可丟失的消息傳遞,可利用該傳輸機制保證消息在離線設(shè)備上線后仍能收到。Subscriber-Client需要做好重復(fù)消息處理工作。
- Qos-2 只有一次
Qos 2 保障消息到達終點只有1次。此類消息保證接接收端對于一條消息只接收一次,是MQTT協(xié)議中最安全且傳輸速度最慢的一種消息傳遞形式。適用于十分重要且不允許重復(fù)消息出現(xiàn)的場景使用,由于消息十分重要,因此可忽視額外的網(wǎng)絡(luò)開銷。
Part 04最小MQTT應(yīng)用搭建
在了解MQTT理論基礎(chǔ)概念后,我們一起在Windows系統(tǒng)上搭建一個最小MQTT服務(wù),實現(xiàn)MQTT消息的發(fā)送及訂閱。
(1) Broker搭建
我們選擇開源代理平臺Mosquitto作為此次最小MQTT應(yīng)用的單點Broker。
將Mosquitto Windows版下載完成后,通過Windows系統(tǒng)終端打開mosquitto.exe文件。輸入./mosquitto.exe -p 1883 即在Windows系統(tǒng)上啟動了一個MQTT服務(wù),監(jiān)聽地址為127.0.0.1,端口是1883。
(2) Client搭建
完成Broker搭建后,我們還需要Client實現(xiàn)消息的發(fā)送和訂閱。我們選擇mqtt.fx軟件作為此次最小MQTT應(yīng)用的Client。打開mqtt.fx軟件,我們通過設(shè)置MQTT Broker Address為127.0.01,Broker Port為1883,并自定義Client ID。完成設(shè)置后,點擊主頁面的Connect,頁面右上角的連接指示燈顯示為綠色即表示完成了連接,此時我們實現(xiàn)了Client到Broker的連接。
(3) 消息訂閱
假定步驟二創(chuàng)建的Client為一個Subscriber-Client,此時通過點擊主頁面中的Subscribe,填寫訂閱Topic信息,在示例中我訂閱的Topic為test,即可完成該Client對于該Topic訂閱。
(4) 消息發(fā)送
重新打開一個mqtt.fx客戶端,創(chuàng)建一個Publisher-Client,設(shè)置MQTT Broker信息與Subscriber-Client信息一致,成功連接Broker后,在Publish頁面下,向指定Topic即test發(fā)送信息,此時我們可以在Subscriber-Client界面上看到消息成功的從Broker轉(zhuǎn)發(fā)至Subscriber-Client。
至此一個最小的MQTT應(yīng)用就搭建完成了。
綜上所述,MQTT協(xié)議關(guān)注于消息,擁有輕量、高效、低開銷等特性,相對于HTTP等廣泛應(yīng)用于互聯(lián)網(wǎng)場景的協(xié)議來說,MQTT協(xié)議與物聯(lián)網(wǎng)通信領(lǐng)域更加契合。?