網(wǎng)關(guān)輕量化傳輸協(xié)議——MQTT
自1999年由IBM的Andy Stanford-Clark與Arlen Nipper(當(dāng)時(shí)為Arcom成員,后歸入Cirrus Link)共同發(fā)布以來(lái),MQTT這一輕量級(jí)消息傳輸協(xié)議,憑借其簡(jiǎn)潔與高效的特點(diǎn),贏得了業(yè)界的廣泛關(guān)注與認(rèn)可。MQTT的設(shè)計(jì)初衷在于解決低帶寬與不穩(wěn)定網(wǎng)絡(luò)環(huán)境下物聯(lián)網(wǎng)應(yīng)用的通信難題,采用發(fā)布/訂閱模式,能以極少的代碼量為聯(lián)網(wǎng)設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。
MQTT的起源
全稱(chēng)“MQ Telemetry Transport”與Arlen Nipper的背景緊密相關(guān)。九十年代初期,Nipper在參與Conoco Phillips公司的原油管道數(shù)據(jù)采集監(jiān)控系統(tǒng)(pipeline SCADA system)項(xiàng)目時(shí),為實(shí)現(xiàn)傳感器與IBM MQ Integrator之間的實(shí)時(shí)數(shù)據(jù)傳輸,開(kāi)發(fā)了該協(xié)議。鑒于當(dāng)時(shí)帶寬資源有限且成本高昂,MQTT的設(shè)計(jì)特別注重輕量化和帶寬節(jié)約,這也是其“輕量級(jí)”稱(chēng)號(hào)的由來(lái)。
MQTT協(xié)議的優(yōu)勢(shì)

首先,MQTT協(xié)議實(shí)現(xiàn)簡(jiǎn)單,便于部署與維護(hù)。其次,它支持三種消息服務(wù)質(zhì)量等級(jí)(QoS),能夠根據(jù)網(wǎng)絡(luò)環(huán)境的不同需求,提供不同級(jí)別的消息傳遞可靠性保障。此外,MQTT協(xié)議輕量且節(jié)省帶寬,消息頭部最小僅需2個(gè)字節(jié),非常適合在帶寬受限的網(wǎng)絡(luò)環(huán)境中運(yùn)行。同時(shí),MQTT協(xié)議與數(shù)據(jù)格式無(wú)關(guān),這為其在多種應(yīng)用場(chǎng)景下的靈活性提供了可能。最后,MQTT協(xié)議具備持續(xù)的會(huì)話感知能力,能夠?qū)崟r(shí)感知設(shè)備的在線狀態(tài),確保消息的有效傳遞。
與其他通信協(xié)議的對(duì)比
HTTP協(xié)議
MQTT報(bào)文體積更小,網(wǎng)絡(luò)開(kāi)銷(xiāo)更低;同時(shí),MQTT基于發(fā)布/訂閱模型,支持雙工通信,能夠?qū)崟r(shí)推送消息,而HTTP則需通過(guò)輪詢(xún)獲取數(shù)據(jù)更新。此外,MQTT是有狀態(tài)的協(xié)議,能夠從連接異常中斷中恢復(fù),而HTTP則無(wú)此功能。與XMPP協(xié)議相比,MQTT設(shè)計(jì)更為簡(jiǎn)單輕量,路由靈活,報(bào)文體積小且編解碼簡(jiǎn)便,更適合在移動(dòng)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)消息領(lǐng)域應(yīng)用。
MQTT為什么是物聯(lián)網(wǎng)的首選協(xié)議
據(jù)IoT Analytics發(fā)布的《2022年春季物聯(lián)網(wǎng)狀況》研究報(bào)告顯示,物聯(lián)網(wǎng)市場(chǎng)預(yù)計(jì)到2022年將增長(zhǎng)18%,達(dá)到144億活躍連接。面對(duì)如此龐大的物聯(lián)網(wǎng)設(shè)備接入和管理需求,MQTT協(xié)議憑借其輕量高效、可靠的消息傳遞、海量連接支持以及安全的雙向通信等優(yōu)勢(shì),成為物聯(lián)網(wǎng)行業(yè)的優(yōu)選。
輕量高效
MQTT協(xié)議將協(xié)議本身的額外消耗降至最低,能夠在帶寬受限的網(wǎng)絡(luò)環(huán)境中穩(wěn)定運(yùn)行。同時(shí),MQTT客戶(hù)端所需硬件資源極少,能夠運(yùn)行于各種資源受限的邊緣端設(shè)備上。在可靠的消息傳遞方面,MQTT協(xié)議提供了三種QoS等級(jí),確保消息在不同網(wǎng)絡(luò)環(huán)境下的可靠傳遞。此外,MQTT協(xié)議還支持清除會(huì)話機(jī)制,對(duì)于希望在重新連接后接收離線期間遺漏消息的客戶(hù)端,可在連接時(shí)設(shè)置關(guān)閉清除會(huì)話,服務(wù)端將為客戶(hù)端存儲(chǔ)訂閱關(guān)系及離線消息,并在客戶(hù)端再次上線后發(fā)送。
海量連接支持
MQTT協(xié)議自誕生之初便考慮了日益增長(zhǎng)的物聯(lián)網(wǎng)設(shè)備數(shù)量。得益于其卓越的設(shè)計(jì),基于MQTT的物聯(lián)網(wǎng)應(yīng)用及服務(wù)能夠輕松實(shí)現(xiàn)高并發(fā)、高吞吐、高可擴(kuò)展性。目前,支持并發(fā)連接數(shù)最多的MQTT服務(wù)器是EMQX。最近發(fā)布的EMQX 5.0通過(guò)23節(jié)點(diǎn)的集群實(shí)現(xiàn)了1億MQTT連接及每秒100萬(wàn)消息吞吐,成為全球最具擴(kuò)展性的MQTT服務(wù)器。
安全的雙向通信
MQTT協(xié)議依賴(lài)于發(fā)布/訂閱模式,允許網(wǎng)關(guān)設(shè)備與云之間進(jìn)行雙向消息通信。同時(shí),MQTT協(xié)議支持通過(guò)TLS/SSL實(shí)現(xiàn)安全的雙向通信,并提供客戶(hù)端ID、用戶(hù)名和密碼等應(yīng)用層的身份驗(yàn)證與授權(quán)機(jī)制。此外,MQTT協(xié)議還具備心跳保活機(jī)制和遺愿消息功能,以應(yīng)對(duì)網(wǎng)絡(luò)不穩(wěn)定和客戶(hù)端異常下線的情況。
注意:MQTT協(xié)議在不斷發(fā)展中持續(xù)升級(jí)。MQTT 5.0在3.1.1版本的基礎(chǔ)上增加了會(huì)話/消息延時(shí)、原因碼、主題別名、用戶(hù)屬性、共享訂閱等特性,更符合現(xiàn)代物聯(lián)網(wǎng)應(yīng)用需求,提高了大型系統(tǒng)的性能、穩(wěn)定性與可擴(kuò)展性。因此,對(duì)于初次接觸MQTT的開(kāi)發(fā)者,建議使用MQTT 5.0版本。
MQTT協(xié)議的應(yīng)用
MQTT服務(wù)器和客戶(hù)端的選擇同樣重要。一個(gè)成熟的MQTT服務(wù)器能夠支持海量客戶(hù)端連接及百萬(wàn)級(jí)消息吞吐,幫助物聯(lián)網(wǎng)業(yè)務(wù)提供商專(zhuān)注于業(yè)務(wù)功能,并快速構(gòu)建可靠的MQTT應(yīng)用。而MQTT客戶(hù)端庫(kù)的選擇則取決于開(kāi)發(fā)者的編程語(yǔ)言和業(yè)務(wù)需求,目前幾乎所有編程語(yǔ)言都有成熟的開(kāi)源MQTT客戶(hù)端庫(kù)可供選擇。此外,一款易用且功能強(qiáng)大的MQTT測(cè)試工具也是MQTT應(yīng)用開(kāi)發(fā)的關(guān)鍵。MQTT X作為一款開(kāi)源的跨平臺(tái)桌面客戶(hù)端,提供了全面的MQTT 5.0功能測(cè)試,并支持多種操作系統(tǒng)和場(chǎng)景下的MQTT測(cè)試需求。

























