ERP接口開(kāi)發(fā)對(duì)接,HTTP API,websocket,SDK鑒權(quán)加密參數(shù)解密
物聯(lián)網(wǎng)MQTT通訊,主題訂閱,發(fā)送消息
什么是 MQTT?
MQTT(Message Queuing Telemetry Transport)是一種輕量級(jí)、基于發(fā)布-訂閱模式的消息傳輸協(xié)議,適用于資源受限的設(shè)備和低帶寬、高延遲或不穩(wěn)定的網(wǎng)絡(luò)環(huán)境。它在物聯(lián)網(wǎng)應(yīng)用中廣受歡迎,能夠?qū)崿F(xiàn)傳感器、執(zhí)行器和其它設(shè)備之間的高效通信。
MQTT有多個(gè)版本,其中3.0、3.1.1和5.0是比較常見(jiàn)的版本。以下是它們之間的主要區(qū)別:
MQTT 3.0:
這是MQTT協(xié)議的早期版本,奠定了MQTT的基礎(chǔ)。
它具有基本的發(fā)布/訂閱功能,但相對(duì)于后續(xù)版本,其功能較為有限。
MQTT 3.1.1:
在3.0版本的基礎(chǔ)上進(jìn)行了改進(jìn)和優(yōu)化。
增加了對(duì)QoS(服務(wù)質(zhì)量)級(jí)別的支持,提供了消息傳遞的可靠性保證。
引入了持久化連接,減少了網(wǎng)絡(luò)連接的開(kāi)銷(xiāo)。
提供了更好的跨平臺(tái)支持,適用于各種設(shè)備和操作系統(tǒng)。
MQTT 5.0:
這是MQTT協(xié)議的最新版本,對(duì)之前的版本進(jìn)行了大量的改進(jìn)和擴(kuò)展。
引入了新的特性,如共享訂閱(Shared Subscriptions),增強(qiáng)了負(fù)載均衡和容錯(cuò)能力。
增加了對(duì)消息屬性的支持,使得消息更加靈活和可擴(kuò)展。
提供了更好的安全性,支持TLS/SSL加密和身份驗(yàn)證。
改進(jìn)了QoS級(jí)別的實(shí)現(xiàn),提供了更高的消息傳遞可靠性。
總結(jié):從MQTT 3.0到3.1.1再到5.0,MQTT協(xié)議在功能、性能、安全性和可擴(kuò)展性方面不斷進(jìn)行改進(jìn)和擴(kuò)展,以滿(mǎn)足物聯(lián)網(wǎng)應(yīng)用的需求。隨著版本的升級(jí),MQTT協(xié)議逐漸變得更加成熟和完善,為物聯(lián)網(wǎng)應(yīng)用提供了更強(qiáng)大的支持。
為什么 MQTT 是適用于物聯(lián)網(wǎng)的最佳協(xié)議?
MQTT 所具有的適用于物聯(lián)網(wǎng)特定需求的特點(diǎn)和功能,使其成為物聯(lián)網(wǎng)領(lǐng)域最佳的協(xié)議之一。它的主要特點(diǎn)包括:
輕量級(jí):物聯(lián)網(wǎng)設(shè)備通常在處理能力、內(nèi)存和能耗方面受到限制。MQTT 開(kāi)銷(xiāo)低、報(bào)文小的特點(diǎn)使其非常適合這些設(shè)備,因?yàn)樗母俚馁Y源,即使在有限的能力下也能實(shí)現(xiàn)高效的通信。
可靠:物聯(lián)網(wǎng)網(wǎng)絡(luò)常常面臨高延遲或連接不穩(wěn)定的情況。MQTT 支持多種 QoS 等級(jí)、會(huì)話感知和持久連接,即使在困難的條件下也能保證消息的可靠傳遞,使其非常適合物聯(lián)網(wǎng)應(yīng)用。
安全通信:安全對(duì)于物聯(lián)網(wǎng)網(wǎng)絡(luò)至關(guān)重要,因?yàn)槠浣?jīng)常涉及敏感數(shù)據(jù)的傳輸。為確保數(shù)據(jù)在傳輸過(guò)程中的機(jī)密性,MQTT 提供傳輸層安全(TLS)和安全套接層(SSL)加密功能。此外,MQTT 還通過(guò)用戶(hù)名/密碼憑證或客戶(hù)端證書(shū)提供身份驗(yàn)證和授權(quán)機(jī)制,以保護(hù)網(wǎng)絡(luò)及其資源的訪問(wèn)。
雙向通信:MQTT 的發(fā)布-訂閱模式為設(shè)備之間提供了無(wú)縫的雙向通信方式?蛻(hù)端既可以向主題發(fā)布消息,也可以訂閱接收特定主題上的消息,從而實(shí)現(xiàn)了物聯(lián)網(wǎng)生態(tài)系統(tǒng)中的高效數(shù)據(jù)交換,而無(wú)需直接將設(shè)備耦合在一起。這種模式也簡(jiǎn)化了新設(shè)備的集成,同時(shí)保證了系統(tǒng)易于擴(kuò)展。
連續(xù)、有狀態(tài)的會(huì)話:MQTT 提供了客戶(hù)端與 Broker 之間保持有狀態(tài)會(huì)話的能力,這使得系統(tǒng)即使在斷開(kāi)連接后也能記住訂閱和未傳遞的消息。此外,客戶(hù)端還可以在建立連接時(shí)指定一個(gè)保活間隔,這會(huì)促使 Broker 定期檢查連接狀態(tài)。如果連接中斷,Broker 會(huì)儲(chǔ)存未傳遞的消息(根據(jù) QoS 級(jí)別確定),并在客戶(hù)端重新連接時(shí)嘗試傳遞它們。這個(gè)特性保證了通信的可靠性,降低了因間斷性連接而導(dǎo)致數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
大規(guī)模物聯(lián)網(wǎng)設(shè)備支持:物聯(lián)網(wǎng)系統(tǒng)往往涉及大量設(shè)備,需要一種能夠處理大規(guī)模部署的協(xié)議。MQTT 的輕量級(jí)特性、低帶寬消耗和對(duì)資源的高效利用使其成為大規(guī)模物聯(lián)網(wǎng)應(yīng)用的理想選擇。通過(guò)采用發(fā)布-訂閱模式,MQTT 實(shí)現(xiàn)了發(fā)送者和接收者的解耦,從而有效地減少了網(wǎng)絡(luò)流量和資源使用。此外,協(xié)議對(duì)不同 QoS 等級(jí)的支持使得消息傳遞可以根據(jù)需求進(jìn)行定制,確保在各種場(chǎng)景下獲得最佳的性能表現(xiàn)。
語(yǔ)言支持:物聯(lián)網(wǎng)系統(tǒng)包含使用各種編程語(yǔ)言開(kāi)發(fā)的設(shè)備和應(yīng)用。MQTT 具有廣泛的語(yǔ)言支持,使其能夠輕松與多個(gè)平臺(tái)和技術(shù)進(jìn)行集成,從而實(shí)現(xiàn)了物聯(lián)網(wǎng)生態(tài)系統(tǒng)中的無(wú)縫通信和互操作性。您可以閱讀我們的 MQTT 客戶(hù)端編程系列文章,學(xué)習(xí)如何在 PHP、Node.js、Python、Golang、Node.js 等編程語(yǔ)言中使用 MQTT。
MQTT 的工作原理
要了解 MQTT 的工作原理,首先需要掌握以下幾個(gè)概念:MQTT 客戶(hù)端、MQTT Broker、發(fā)布-訂閱模式、主題、QoS。
MQTT 客戶(hù)端
任何運(yùn)行 MQTT 客戶(hù)端庫(kù)的應(yīng)用或設(shè)備都是 MQTT 客戶(hù)端。例如,使用 MQTT 的即時(shí)通訊應(yīng)用是客戶(hù)端,使用 MQTT 上報(bào)數(shù)據(jù)的各種傳感器是客戶(hù)端,各種 MQTT 測(cè)試工具也是客戶(hù)端。
MQTT Broker
MQTT Broker 是負(fù)責(zé)處理客戶(hù)端請(qǐng)求的關(guān)鍵組件,包括建立連接、斷開(kāi)連接、訂閱和取消訂閱等操作,同時(shí)還負(fù)責(zé)消息的轉(zhuǎn)發(fā)。一個(gè)高效強(qiáng)大的 MQTT Broker 能夠輕松應(yīng)對(duì)海量連接和百萬(wàn)級(jí)消息吞吐量,從而幫助物聯(lián)網(wǎng)服務(wù)提供商專(zhuān)注于業(yè)務(wù)發(fā)展,快速構(gòu)建可靠的 MQTT 應(yīng)用。
關(guān)于 MQTT Broker 的更多詳情,請(qǐng)參閱文章 2023 年最全面的 MQTT Broker 比較指南。
發(fā)布-訂閱模式
發(fā)布-訂閱模式與客戶(hù)端-服務(wù)器模式的不同之處在于,它將發(fā)送消息的客戶(hù)端(發(fā)布者)和接收消息的客戶(hù)端(訂閱者)進(jìn)行了解耦。發(fā)布者和訂閱者之間無(wú)需建立直接連接,而是通過(guò) MQTT Broker 來(lái)負(fù)責(zé)消息的路由和分發(fā)。
下圖展示了 MQTT 發(fā)布/訂閱過(guò)程。溫度傳感器作為客戶(hù)端連接到 MQTT Broker,并通過(guò)發(fā)布操作將溫度數(shù)據(jù)發(fā)布到一個(gè)特定主題(例如 Temperature)。MQTT Broker 接收到該消息后會(huì)負(fù)責(zé)將其轉(zhuǎn)發(fā)給訂閱了相應(yīng)主題(Temperature)的訂閱者客戶(hù)端。
主題
MQTT 協(xié)議根據(jù)主題來(lái)轉(zhuǎn)發(fā)消息。主題通過(guò) / 來(lái)區(qū)分層級(jí),類(lèi)似于 URL 路徑,例如:
chat/room/1
sensor/10/temperature
sensor/+/temperature
MQTT 主題支持以下兩種通配符:+ 和 #。
+:表示單層通配符,例如 a/+ 匹配 a/x 或 a/y。
#:表示多層通配符,例如 a/# 匹配 a/x、a/b/c/d。
注意:通配符主題只能用于訂閱,不能用于發(fā)布。
QoS
MQTT 提供了三種服務(wù)質(zhì)量(QoS),在不同網(wǎng)絡(luò)環(huán)境下保證消息的可靠性。
QoS 0:消息最多傳送一次。如果當(dāng)前客戶(hù)端不可用,它將丟失這條消息。
QoS 1:消息至少傳送一次。
QoS 2:消息只傳送一次。
MQTT 的工作流程
客戶(hù)端使用 TCP/IP 協(xié)議與 Broker 建立連接,可以選擇使用 TLS/SSL 加密來(lái)實(shí)現(xiàn)安全通信?蛻(hù)端提供認(rèn)證信息,并指定會(huì)話類(lèi)型(Clean Session 或 Persistent Session)。
客戶(hù)端既可以向特定主題發(fā)布消息,也可以訂閱主題以接收消息。當(dāng)客戶(hù)端發(fā)布消息時(shí),它會(huì)將消息發(fā)送給 MQTT Broker;而當(dāng)客戶(hù)端訂閱消息時(shí),它會(huì)接收與訂閱主題相關(guān)的消息。
MQTT Broker 接收發(fā)布的消息,并將這些消息轉(zhuǎn)發(fā)給訂閱了對(duì)應(yīng)主題的客戶(hù)端。它根據(jù) QoS 等級(jí)確保消息可靠傳遞,并根據(jù)會(huì)話類(lèi)型為斷開(kāi)連接的客戶(hù)端存儲(chǔ)消息。