MQTT
資料來源 https://ithelp.ithome.com.tw/articles/10224407
簡介
- MQTT(Message Queuing Telemetry Transport) 訊息序列遙測傳輸
- 1999年 IBM發明
- 伺服器與用戶端間的發布與訂閱的訊息傳輸協定 (publish / subscribe )
- MQTT 正式變成開放的 OASIS 國際標準
- 適用於 M2M 和 IoT 環境
MQTT 特點
MQTT 好處在於它是一種輕量級協議 ,由於是為了物聯網而設計的協定,因此它所需要的網路頻寬是很低的,而且需要的硬體資源也是低的。很適合用在低功耗和網絡帶寬有限的IoT環境,像是智慧家電或者醫療裝置等等。
MQTT 訊息傳遞原理
- 使用發佈(Publish) / 訂閱(Subscribe)的機制傳訊
- 4個主要的元素:
- 發佈者 (Publisher)
- 訂閱者 (Subscriber)
- 主題 (Topic)
- 轉訊站 (Broker)
- 由發布者 Publish 發佈一個主題,
- 然後就會傳送給 Broker
- 由 Broker 轉發給有 Subscrib 訂閱該主題的人
例如:
蘋果日報、聯合報 (Publish 發佈一個主題) 將報紙交由報社(Broker) 轉發,那報社(Broker)就會去看有誰訂閱(Subscrib 訂閱的人)蘋果日報或者訂閱聯合報,就會將報紙發布給他。
實例:
實際應用上來說,一定會有來自不同IoT設備或Sensors,將收集到的數據發送到MQTT Broker,再由 Broker 針對不同主題去發布給不同訂閱者。
當然啦,Client 同時可以充當數據的訂閱者和發布者,所以 Clien 和 MQTT Bocker 就會同時進行雙向的數據溝通。
MQTT 訊息格式、封包格式
- MQTT的訊息格式有三類:
- Fix Header (固定格式封包)
- Message Type為4 bit數字,共16位數
- Variable Header (變動格式封包)
- Payload (訊息內文)
- Fix Header (固定格式封包)
MQTT QoS級別
- MQTT 定義了三個層級的品質設定
- QoS 代表Publisher與Broker、Broker與Subscriber之間傳輸品質
QoS 0 最多傳送一次(at most once)
- Publisher 傳訊給 Broker 後直接轉傳給 Subscriber,不會回傳確認封包
- QoS 0就像寄平信,不保證訊息會送達
QoS 1 至少傳送一次(at least once)
- Publisher 傳訊給 Broker 後,Broker會回應 PUBACK 訊息給Publisher,確認收到訊息
- Publisher沒有收到PUBACK回應,就會再次發送Publish
- 缺點:
- Publisher沒有收到PUBACK回應,就會認定訊息沒送到,重傳訊息。
- 讓訂閱者重複收到相同訊息。
- 保證訊息會送達,但可能會重複
QoS 2 確實傳送一次(exactly once)
- Publisher 傳訊給 Broker 後,Broker會回應PUBREC訊息給Publisher,確認收到要發布的訊息
- Publisher收到PUBREC回應時,傳送PUBREL(釋放發布訊息)
- Broker收到PUBREL,將訊息發布給Subscriber,並向Publisher回報PUBCOMP
QoS 總結
- QoS 0
- 優點 - 佔用頻寬與傳送時間較少
- 缺點 - 資料可能會遺失
- QoS 1
- 優點 - 佔用頻寬與傳送時間較少較 Qos 2 少
- 缺點 - Subscriber可能會收到重複的訊息
- QoS 2
- 優點 - 不會重覆傳送相同訊息
- 缺點 - 佔用頻寬與傳送時間較多
參考資料與圖片來源
https://blog.softwaretoolbox.com/mqtt-quality-of-service-datahub
影片 13.1MQTT基本介紹
沒有留言:
張貼留言