歷史
-
1999年:MQTT最初由IBM的Andy Stanford-Clark和Cirrus Link的Arlen Nipper開發,用于滿足石油和天然氣公司在遠程地區監控設備的需求。
-
2006年:IBM發布了MQTT的最初開源實現,但此時MQTT并未獲得廣泛的關注。
-
2010年:隨著物聯網(IoT)的興起,MQTT開始被更廣泛地采用,并逐漸有了更多的開源實現。
-
2011年:Eclipse基金會啟動了Eclipse Paho項目,提供了一系列開源的MQTT客戶端庫,支持多種編程語言。
-
2012年:Eclipse基金會啟動了Eclipse Mosquitto項目,提供了一個開源的MQTT代理(broker)實現。
-
2014年:MQTT成為OASIS標準,這標志著它的發展進入了一個新的階段,并進一步推動了開源社區對MQTT協議的興趣和參與。
-
2016年:MQTT 3.1.1版本被正式批準為OASIS標準,這是MQTT的第一個正式標準版本。
-
2019年:MQTT 5.0版本發布,提供了許多新特性,包括更好的錯誤處理、共享訂閱、消息屬性和增強的安全性。開源社區迅速跟進,更新了各種開源實現以支持新版本。
-
至今:MQTT的開源實現繼續發展,如Eclipse Paho和Mosquitto等項目,這些項目的成功和普及直接促進了MQTT協議的廣泛應用和發展。同時,其他開源項目如HiveMQ、VerneMQ等也提供了不同的功能和服務,豐富了MQTT的開源生態系統。
特點
?
-
輕量級:MQTT設計簡潔,消息頭很小,可以最小化網絡帶寬的使用,適合在資源受限的環境中運行,如物聯網設備。
-
發布/訂閱模式:MQTT使用發布/訂閱消息模式,允許一個消息被發送到一個主題(topic),并且所有訂閱了該主題的客戶端都會收到這個消息。這種模式解耦了發布者和訂閱者,提高了系統的可擴展性和靈活性。
-
服務質量(QoS)級別:MQTT支持三種不同的服務質量級別,以適應不同的網絡環境和應用需求:
- QoS 0:最多一次交付。消息可能會丟失,但不會重復。
- QoS 1:至少一次交付。消息不會丟失,但可能會重復。
- QoS 2:確保一次交付。消息不會丟失也不會重復。
-
持久會話:MQTT支持持久會話,客戶端可以指示代理(broker)存儲其訂閱信息和未確認的消息,即使客戶端斷開連接后重新連接,也能恢復會話狀態。
-
遺囑消息(Last Will and Testament):客戶端在連接到代理時可以指定一個遺囑消息,如果客戶端非正常斷開連接,代理會將這個遺囑消息發布到指定的主題。
-
小型傳輸優化:MQTT協議優化了小型傳輸,適合在帶寬有限和不穩定的網絡環境中使用,如移動通信網絡或衛星鏈路。
-
安全性:MQTT支持多種安全性選項,包括使用TLS(Transport Layer Security)加密傳輸,以確保數據的安全和隱私。
-
跨平臺兼容性:MQTT可以在多種平臺上運行,包括嵌入式系統、服務器、移動設備等,支持多種編程語言。
-
易于使用和集成:MQTT的簡單性和靈活性使其易于集成到現有的系統和應用程序中,同時也便于開發者快速上手和使用。
-
社區支持和開源實現:MQTT有廣泛的社區支持,并且有多種開源實現,如Eclipse Paho和Mosquitto,這些實現提供了客戶端和代理的代碼,可以自由使用和修改。
-
適應性強:MQTT協議可以適應各種網絡環境和應用場景,包括物聯網、移動應用、智能家居、工業自動化等。
-
可擴展性:MQTT協議設計允許通過添加新的功能和服務來擴展協議,以適應未來的需求和發展
?MQTT 5.0? ?與? ? 3.1.1的區別
MQTT 5.0是MQTT協議的第四個正式版本,它在2019年發布,提供了許多新特性和改進,與之前的3.1.1版本相比,MQTT 5.0在性能、功能和安全方面都有顯著的提升。以下是MQTT 5.0與3.1.1版本之間的一些主要區別:
?
-
增強的認證和授權:MQTT 5.0提供了更靈活的認證和授權機制,支持多種認證方法。
-
消息和主題屬性:MQTT 5.0增加了對消息和主題屬性的支持,允許在發布消息時附加額外的元數據。
-
共享訂閱:MQTT 5.0允許客戶端通過共享訂閱的方式來訂閱主題,以提高系統的可擴展性和性能。
-
響應信息:MQTT 5.0支持響應信息,允許客戶端在發布消息時請求一個響應。
-
改進的會話管理:MQTT 5.0提供了更精細的會話管理控制,包括會話過期的設置和會話終結的原因。
-
增強的錯誤報告:MQTT 5.0增加了更多的錯誤代碼和原因字符串,使得錯誤報告更加詳細和有用。
-
消息重傳:MQTT 5.0在QoS 1和QoS 2中引入了消息重傳機制,以提高消息的可靠傳輸。
-
流量控制:MQTT 5.0提供了流量控制功能,以避免過載。
-
用戶屬性:MQTT 5.0允許在連接、發布、訂閱等操作中添加用戶屬性,以提供額外的上下文信息。
-
更好的性能和可擴展性:MQTT 5.0在設計上考慮了更好的性能和可擴展性,以適應未來的需求和發展。
-
兼容性:雖然MQTT 5.0引入了許多新特性,但它仍然保持了與3.1.1版本的兼容性。
?
?MQTT 常用的服務器
?
MQTT服務器(也稱為MQTT代理或MQTT broker)是MQTT(Message Queuing Telemetry Transport)協議中的核心組件,負責接收客戶端的連接請求、處理客戶端的訂閱和發布消息請求,并將消息路由到相應的訂閱者。以下是幾種常用的MQTT服務器:
?
-
Eclipse Mosquitto:這是一個開源的MQTT服務器,由Eclipse基金會維護。它支持MQTT 3.1、3.1.1和5.0版本,具有高度的可擴展性和可靠性,適用于各種規模的部署。
-
HiveMQ:這是一個商業化的MQTT服務器,提供企業級的功能和性能。HiveMQ支持MQTT 3.1、3.1.1和5.0版本,并且提供了豐富的插件和擴展功能。
-
IBM MQTT Server:這是IBM提供的一個MQTT服務器,支持MQTT 3.1和3.1.1版本。它提供了高可用性和安全性,并且可以與其他IBM產品集成。
-
VerneMQ:這是一個由Erlang社區開發的MQTT服務器,支持MQTT 3.1、3.1.1和5.0版本。它具有高可用性和可擴展性,并且支持多種認證和授權機制。
-
EMQX:這是一個由EMQ公司開發的MQTT服務器,支持MQTT 3.1、3.1.1和5.0版本。它提供了豐富的插件和擴展功能,以及高可用性和安全性。//有大量的中文資料并且開源
?官網
Eclipse Mosquitto? 開源 MQTT 代理
EMQX官網?
?
?MQTT 發布/訂閱模式介紹
發布者(Publisher)//發信息
- 發布消息:發布者是發送消息的客戶端,它將消息發布到一個特定的主題(Topic)。
- QoS級別:發布者可以選擇不同的服務質量級別(QoS Levels),以控制消息的可靠傳輸:
- QoS 0:最多一次(At Most Once) - 消息可能會丟失,但不會重復發送。
- QoS 1:至少一次(At Least Once) - 消息不會丟失,但可能會重復發送。
- QoS 2:精確一次(Exactly Once) - 消息不會丟失也不會重復發送。
訂閱者(Subscriber)//接收信息
- 訂閱主題:訂閱者是接收消息的客戶端,它可以訂閱一個或多個主題。
- 接收消息:訂閱者會接收所有發布到其訂閱主題的消息。
- QoS級別:訂閱者也可以指定它希望接收消息的QoS級別。
代理(Broker)//服務器
- 消息路由:代理是MQTT的核心組件,負責接收發布者的消息,并將消息路由到訂閱該主題的訂閱者。
- 持久會話:代理可以存儲訂閱者和發布者的會話信息,以便在網絡斷開后重新連接時恢復會話狀態。
遺囑消息(Last Will and Testament)
- 發布遺囑:當客戶端斷開連接時,如果配置了遺囑消息,代理會發布一個消息到指定的主題,通知其他客戶端該客戶端已經斷開。
?主題(Topic)
- 主題是 MQTT 進行消息路由的基礎,它類似 URL 路徑,使用斜杠 / 進行分層,比如 sensor/1/temperature。一個主題可以有多個訂閱者,代理會將該主題下的消息轉發給所有訂閱者;一個 主題也可以有多個發布者,代理將按照消息到達的順序轉發。
?
?
?