MQTT 簡介

MQTT 全稱爲 Message Queuing Telemetry Transport(消息隊列遙測傳輸)是一種基於發佈/訂閱範式的“輕量級”消息協議,由 IBM 發佈。

 

1.MQTT是一種發佈/訂閱傳輸協議

主要有三種身份:發佈者(Publisher)、代理(Broker,服務器)、訂閱者(Subscriber)。其中,消息的發佈者和訂閱者都是客戶端,消息代理是服務器,而消息發佈者可以同時是訂閱者,實現了生產者與消費者的脫耦。

 

2.使用 TCP/IP 提供網絡連接,提供有序、無損、雙向連接

 

3.對負載內容屏蔽的消息傳輸;

 

4.具體有三種消息發佈的服務質量:

  • 至多一次,消息發佈完全依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因爲不久後還會有第二次發送。
  • 至少一次,確保消息到達,但消息重複可能會發生。
  • 只有一次,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。

 

5.小型傳輸,開銷小,固定長度的頭部是 2 字節,協議交換最小化,以降低網絡流量;

 

6.使用Last Will和Testament特性通知有關各方客戶端異常中斷的機制;

Last Will:即遺言機制,用於通知同一主題下的其他設備發送遺言的設備已經斷開了連接。

Testament:遺囑機制,功能類似於Last Will。

 

 

 

假設現在有一個物聯網的應用,題主當然可以直接用TCP socket 做通信,實際上不少人也是這麼做的。然後你就會發現:

* 需要自己寫確認重傳的機制,因爲TCP 連接說不定就斷了。

* 如果有很多個傳感器(生產者),又要寫代碼管理這麼多TCP連接呢。

* 如果同時又有多個地方需要用到這些數據,還得寫一個轉發的邏輯。

* 如果系統很複雜,參與人或公司很多,那通信格式要怎麼定,怎麼改,溝通成本就很大了。

這些東西這麼麻煩,又不想加班寫代碼,那有沒有辦法簡便地解決呢?當然有,就是用現成的協議啦,比如MQTT。

MQTT 提供兩個核心功能:

* 三個級別的QOS

QoS 0:“最多一次”,消息發佈完全依賴底層 TCP/IP 網絡。分發的消息可能丟失或重複。例如,這個等級可用於環境傳感器數據,單次的數據丟失沒關係,因爲不久後還會有第二次發送。

QoS 1:“至少一次”,確保消息可以到達,但消息可能會重複。

QoS 2:“只有一次”,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裏如果消息重複或丟失會導致不正確的收費。

 

*基於訂閱/發佈的消息轉發服務。

用了MQTT, 上面提到的這些問題就都被優雅地解決掉啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章