MQTT 是一種基于發(fā)布/訂閱模式的輕量級(jí)消息傳輸協(xié)議,專門(mén)為設(shè)備資源有限和低帶寬、高延遲的不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)場(chǎng)景應(yīng)用而設(shè)計(jì),可以用極少的代碼為聯(lián)網(wǎng)設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。MQTT 協(xié)議廣泛應(yīng)用于智能硬件、智慧城市、智慧農(nóng)業(yè)、智慧醫(yī)療、新零售、新能源、新金融、車聯(lián)網(wǎng)等物聯(lián)網(wǎng)領(lǐng)域。
01、MQTT 協(xié)議發(fā)展史
MQTT 是在上世紀(jì) 90 年代末由 IBM 的 Andy Stanford-Clark 博士和 Arcom的 Arlen Nipper 開(kāi)發(fā),用于通過(guò)衛(wèi)星網(wǎng)絡(luò)監(jiān)測(cè)石油管道。
2014 年發(fā)布?MQTT v3.1.1 版,增強(qiáng)了其清晰性和互操作性。它能夠在資源有限的網(wǎng)絡(luò)上高效地傳輸消息,因此在物聯(lián)網(wǎng)應(yīng)用中廣受歡迎。
2019 年發(fā)布了 MQTT v5.0 版,在 v3.1.1 版本基礎(chǔ)上增加了會(huì)話過(guò)期間隔、原因代碼、主題別名、用戶屬性、訂閱選項(xiàng)、指定請(qǐng)求/響應(yīng)、共享訂閱等更加符合現(xiàn)代物聯(lián)網(wǎng)應(yīng)用需求的特性,提高了大型系統(tǒng)的性能、穩(wěn)定性與可擴(kuò)展性,逐漸成為眾多物聯(lián)網(wǎng)企業(yè)的首選通信協(xié)議。
02、MQTT?5.0?新特性
會(huì)話過(guò)期間隔:?管理會(huì)話的生命周期
基于 MQTT 5.0 ,客戶端通過(guò)Clean Start 與 Session Expiry Interval 指定服務(wù)器在客戶端斷開(kāi)連接后應(yīng)將會(huì)話保持多長(zhǎng)時(shí)間。也就是說(shuō),您可以指定一個(gè)具體的時(shí)間段,在網(wǎng)絡(luò)斷開(kāi)再連接后,會(huì)話仍然有效。這樣可以更靈活地管理會(huì)話的生命周期,并節(jié)省服務(wù)器的資源。
原因代碼: 了解斷開(kāi)連接或失敗原因
在 MQTT 5.0 中,可用的 Reason Code 被擴(kuò)充到了 43 個(gè),并且規(guī)定了Reason Code?<?0x80 用于表示成功,Reason Code ≥?0x80 則用于表示失敗,從而幫助我們了解斷開(kāi)連接或發(fā)生故障的原因。比如,如果客戶端連接服務(wù)器失敗,服務(wù)器會(huì)返回一個(gè)原因代碼,解釋連接不成功的原因,比如登錄憑證錯(cuò)誤或者服務(wù)器不在線。
主題別名:?減少消息頭部的開(kāi)銷
在 MQTT 5.0 中,引入了主題別名 ( Topic Alias ),你可以為主題分配一個(gè)簡(jiǎn)短的數(shù)字別名。這個(gè)別名可以在后續(xù)的消息中替代完整的主題名稱,大大減少了 MQTT 頭部的大小,從而節(jié)省了網(wǎng)絡(luò)帶寬。
用戶屬性:?MQTT 頭部自定義元數(shù)據(jù)
在 MQTT 5.0 中,引入了用戶屬性(User Properties)其實(shí)是一種自定義屬性,允許用戶向 MQTT 消息添加自己的元數(shù)據(jù),傳輸額外的自定義信息以擴(kuò)充更多應(yīng)用場(chǎng)景,比如消息的時(shí)間戳、設(shè)備位置或其他應(yīng)用相關(guān)的數(shù)據(jù),從而增加了 MQTT 消息傳輸?shù)撵`活性和控制力。
訂閱選項(xiàng):?細(xì)粒度的訂閱控制
在 MQTT 5.0 中,提供了 4 個(gè)訂閱選項(xiàng),分別是 QoS、No Local、Retain As Published、Retain Handling,用來(lái)指定如何接收每個(gè)訂閱主題的消息。比如,客戶端可以指定他們是否接收某個(gè)訂閱的保留消息,或者是否接收和訂閱具有相同 QoS 級(jí)別的消息。
指定請(qǐng)求/響應(yīng):?允許客戶端回復(fù)指定主題
在 MQTT 5.0 中,引入了響應(yīng)主題 (Response Topic)、關(guān)聯(lián)數(shù)據(jù) (Correlation Data) 和響應(yīng)信息 (Response Information) ,請(qǐng)求方可以在請(qǐng)求消息中指定自己期望的響應(yīng)屬性,從而使客戶端和服務(wù)器之間的通信變得更高效和簡(jiǎn)潔。
共享訂閱:?訂閱者負(fù)載均衡功能
在 MQTT 5.0 中共享訂閱特性使得多個(gè)客戶端可以共享一個(gè)訂閱,在使用共享訂閱的客戶端之間均衡地分配消息負(fù)載。也就是,當(dāng)一條消息發(fā)布到一個(gè)共享主題時(shí),服務(wù)器會(huì)把消息分發(fā)給共享訂閱中的某個(gè)客戶端,從而實(shí)現(xiàn)消息的負(fù)載均衡。