Skip to main content

MQTT - Introduction

介紹

MQTT 是一種輕量級訊息傳遞協定,消息報頭最小只佔 2 個位元組(2 bytes),用於機器對機器的通訊。智慧型感應器、可穿戴裝置和其他物聯網 (IoT) 裝置,主要應用場景為必須透過頻寬受限的網路來傳輸和接收資料。這些 IoT 裝置使用 MQTT 進行資料傳輸,MQTT 運行在傳輸控制協議/互聯網協議 (TCP/IP) 堆棧之上,易於實作並且可靠、有效地傳輸 IoT 資料。MQTT 支援裝置到雲端和雲端到裝置間的訊息傳遞。

原理

MQTT 協定的運作原理是發佈/訂閱模型。在傳統的網路通訊中,用戶端和伺服器直接相互通訊。用戶端向伺服器請求資源或資料,然後伺服器會處理並傳回回應,一發一收完成一次資料交換。但是,MQTT 使用發佈/訂閱模式,將訊息傳送者 (發佈者) 與訊息接收者 (訂閱者) 解耦,達到發布者一次將訊息發送給多個訂閱者,此外,發布者無需等待接收者回應,可以持續發送訊息。而稱為訊息代理程式的第三個元件(Broker),則處理發佈者與訂閱者之間的通訊。代理程式的任務是篩選發佈者的所有傳入訊息,並將其正確地分發給訂閱者。代理程式將發佈者與訂閱者如下所示解耦。

空間解耦 發佈者與訂閱者不知道彼此的網路位置,也不交換 IP 地址或連接埠號等資訊。

時間解耦 發佈者與訂閱者不會同時執行或具有網路連線。

同步解耦 發佈者與訂閱者都可以傳送或接收訊息而不會互相干擾。例如,訂閱者不必等待發佈者傳送訊息。

MQTT 運作元件

  • MQTT 用戶端: MQTT 用戶端是指執行 MQTT 程式庫的任何裝置,包括伺服器和微型控制器。如果用戶端正在傳送訊息,則充當發佈者;如果正在接收訊息,則充當接收者。基本上,任何透過網路使用 MQTT 進行通訊的裝置都可稱為 MQTT 用戶端裝置。

  • MQTT 代理程式: MQTT 代理程式是協調不同用戶端間訊息的後端系統。代理程式的職責包括接收和篩選訊息,識別訂閱每則訊息的用戶端,並向其傳送訊息。此外,它還負責其他任務,例如:授權和驗證 MQTT 用戶端、將訊息傳遞給其他系統以作進一步分析、處理錯過的訊息和用戶端工作階段。

MQTT 如何運作

MQTT 連線

用戶端和代理程式開始使用 MQTT 連線進行通訊。用戶端透過向 MQTT 代理程式傳送 CONNECT 訊息來起始連線。代理程式透過回應 CONNACK 訊息,來確認已建立連線。MQTT 用戶端和代理程式都需要 TCP/IP 堆疊以進行通訊。用戶端從不相互連線,只與代理程式連線。

MQTT 訂閱發佈訊息

用戶端可發佈訊息、訂閱特定訊息。當 MQTT 代理程式收到訊息時,它會將其轉傳給感興趣的訂閱者。

  • 發布訊息:MQTT 用戶端以位元組格式發佈包含主題和資料的訊息。用戶端確定資料格式,如文字資料、二進位資料、XML 或 JSON 檔案。
  • 訂閱訊息:MQTT 用戶端向 MQTT 代理程式傳送 SUBSCRIBE 訊息,以接收有關感興趣主題的訊息。

MQTT 訊息等級

  • QoS 0(最多交付一次):訊息息發送即丟棄,不需要等待確認,不需要存儲和重傳。
  • QoS 1(至少交付一次):加入應答與重傳機制,發送方只有在收到接收方的 PUBACK 報文以後,才能認為訊息傳遞成功,在此之前,發送方需要存儲該 PUBLISH 報文以便下次重傳。
  • QoS 2(只交付一次):訊息傳遞,都要求發送方與接收方進行至少兩次請求/響應流程。

Topics

主題是指 MQTT代理程式(broker)用於爲每個連接的客戶端過濾消息的 UTF-8 字符串。主題由一個或多個主題級別組成。每個主題級別由正斜槓(主題級別分隔符)分隔。

Cache Flow

單級:+

Cache Flow Cache Flow

多級:# Cache Flow