歡迎光臨
每天分享高質量文章

三分鐘弄懂物聯網流行協議——MQTT

最熱門的技術莫過於:人工智慧,區塊鏈和物聯網。筆者今天就花三分鐘給大家介紹一個物聯網中非常的基礎一個常用的流行協議,MQTT。

MQTT (Message Queue Telemetry Transport),翻譯成中文就是,遙測傳輸協議,其主要提供了訂閱/發佈兩種訊息樣式,更為簡約、輕量,易於使用,特別適合於受限環境(帶寬低、網絡延遲高、網絡通信不穩定)的訊息分發,屬於物聯網(Internet of Thing)的一個標準傳輸協議。

為什麼使用MQTT 協議?

MQTT(英語全稱,Message Queue Telemetry Transport),中文翻譯過來就是遙測傳輸協議:其主要提供訂閱/發佈樣式,更為簡約、輕量,易於使用,針對受限環境(帶寬低、網絡延遲高、網絡通信不穩定),屬於物聯網(Internet of Thing)的一個傳輸協議。設計思想是開放、簡單、輕量、易於實現。這些特點使它適用於受限環境。例如,但不僅限於此:

  • 特別適合於網絡代價昂貴,帶寬低、不可靠的環境。

  • 能在處理器和記憶體資源有限的嵌入式設備中運行。

  • 使用發佈/訂閱訊息樣式,提供一對多的訊息發佈,從而解除應用程式耦合。

  • 使用 TCP/IP 提供網絡連接。

  • 提供Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

對訊息中間件,估計大家不得不關心的就是訊息的可靠性,也就是訊息的發佈服務質量,可喜的是,MQTT支持三種訊息發佈服務質量(QoS):

  • “至多一次”(QoS==0),訊息發佈完全依賴底層 TCP/IP 網絡。會發生訊息丟失或重覆。這一級別可用於如下情況,環境傳感器資料,丟失一次讀記錄無所謂,因為不久後還會有第二次發送。

  • “至少一次”(QoS==1),確保訊息到達,但訊息重覆可能會發生。

  • “只有一次”(QoS==2),確保訊息到達一次。這一級別可用於如下情況,在計費系統中,訊息重覆或丟失會導致不正確的結果。小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網絡流量。

協議規範的版本

MQTT的協議最新的三個版本是:3.1.1,3.1.0和5.0的協議。

  • 3.1.0的規範如下

    http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

  • 3.1.1的規範如下

    http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718029

  • 5.0 的規範如下

    http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

其中5.0還只是一個提案(2017年7月13日發佈的一個草稿版的提案),所以本篇文章暫時不涉及MQTT 5.0的協議,考慮到目前主流和成熟的MQTT協議的應用都是MQTT 3.1.1的協議,所以筆者還是以MQTT 3.1.1的協議為基準,給大家分享,只要這個會了,其他的自然不在話下。需要註意的是,MQTT 3.1.0和3.1.1 規範,還是有小部分的區別的。比如可變頭部中,在3.1.0的規範中,其關鍵字是,“MQISdP”。

支持MQTT協議訊息中間件產品?

目前有很多的MQTT訊息中間件服務器,如下,都是MQTT協議的服務器端的實現。

  • IBM Websphere

  • MQ Telemetry

  • IBM MessageSight

  • Mosquitto

  • Eclipse Paho

  • emqttd Xively

  • m2m.io

  • webMethods

  • Nirvana Messaging

  • RabbitMQ

  • Apache ActiveMQ

  • Apache Apollo

  • Moquette

  • HiveMQ

  • Mosca

  • Litmus Automation Loop

  • JoramMQ

  • ThingMQ

  • VerneMQ

支持一對多的訊息訂閱

MQTT協議,支持一對多的基於訊息主題(Topic)的訊息訂閱,也就是一個MQTT的客戶端,發送一條特定主題的訊息,

能同時支持多個訂閱者同時訂閱。

如下圖所示意,筆記本和手機都訂閱了訊息主題為temperature的訊息,當溫度傳感器發佈了temperature的訊息(當前溫度為21 C), 筆記本和手機都會受到溫度傳感器發佈的溫度。

MQTT客戶端的語言支持

目前市面上的主流語言都支持。

  • Java

  • Javascript

  • C/C++

  • Python

  • Ruby

  • Objective-C

如果您對MQTT協議感興趣,請關註我的CSDN博客,chancein007。

如果您對MQTT有任何的疑問,請關註我的今日頭條自媒體號,併在文章後面留言,我將盡可能第一時間回覆。

【部分圖片來源於網絡,如果侵權,請與我聯繫刪除】

    赞(0)

    分享創造快樂