MQTT入門

什麼是MQTT

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發佈/訂閱(publish/subscribe)模式的輕量級協議,該協議構建於TCP/IP協議之上。

MQTT特徵

  • 基於 TCP 協議的應用層協議;
  • 採用 C/S 架構;
  • 使用訂閱/發佈模式,將消息的發送方和接受方解耦;
  • 提供 3 種消息的 QoS(Quality of Service): 至多一次,最少一次,只有一次;
  • 收發消息都是異步的,發送方不需要等待接收方應答。

與傳統MQ的區別

雖然 MQTT 協議名稱有 Message Queue 兩個詞,但是它並不是一個像 RabbitMQ 那樣的一個消息隊列,MQTT 跟傳統的消息隊列相比,有以下一些區別:

  • 在傳統消息隊列中,在發送消息之前,必須先創建相應的隊列;在 MQTT 中,不需要預先創建要發佈的主題(可訂閱的 Topic);
  • 在傳統消息隊列中,未被消費的消息總是會被保存在某個隊列中,直到有一個消費者將其消費;在 MQTT 中,如果發佈一個沒有被任何客戶端訂閱的消息,這個消息將被直接扔掉;
  • 在傳統消息隊列中,一個消息只能被一個客戶端獲取,在 MQTT 中,一個消息可以被多個訂閱者獲取,MQTT 協議也不支持指定消息被單一的客戶端獲取。

MQTT通訊模型

MQTT 的通信是通過發佈/訂閱的方式來實現的,消息的發佈方和訂閱方通過這種方式來進行解耦,它們沒有直接地連接,它們需要一箇中間方(Broker)。
在這裏插入圖片描述

  • 發佈方(Publisher)將消息發送到 Broker;
  • Broker 接收到消息以後,檢查下都有哪些訂閱方訂閱了此類消息,然後將消息發送到這些訂閱方(subscriber);
  • 訂閱方(subscriber)從 Broker 獲取該消息;

MQTT Client

任何終端,只要運行了 MQTT 的庫或者代碼,我們都可以將其稱爲 MQTT 的 Client,一個 Client 可以同時是 Publisher 和 Subscriber。

MQTT Broker

Broker 負責接收 Publisher 的消息,併發送給相應的 Subscriber,它是整個 MQTT 訂閱/發佈的核心,具有以下功能:

  • 可以橫向擴展,比如集羣,來滿足大量的 Client 接入;
  • 可以擴展接入業務系統;
  • 易於監控,滿足高可用性。

MQTT協議數據包的固定包頭

名稱 方向 描述
Reserved 0 不可用 保留位
CONNECT 1 Client 到 Broker Client 請求連接到 Broker
CONNACK 2 Broker 到 Client 連接確認
PUBLISH 3 雙向 發佈消息
PUBACK 4 雙向 發佈確認
PUBREC 5 雙向 發佈收到
PUBREL 6 雙向 發佈釋放
PUBCOMP 7 雙向 發佈完成
SUBSCRIBE 8 Client 到 Broker Client 請求訂閱
SUBACK 9 Broker 到 Client 訂閱確認
UNSUBSCRIBE 10 Client 到 Broker Client 請求取消訂閱
UNSUBACK 11 Broker 到 Client 取消訂閱確認
PINGREQ 12 Client 到 Broker PING 請求
PINGRESP 13 Broker 到 Client PING 應答
DISCONNECT 14 Client 到 Broker Client 主動中斷連接
Reserved 15 不可用 保留位
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章