[ Protocol ] 認識 MQTT

學習目標

  • 了解 MQTT Broker 概念與運作方式

簡介


運作方式

  • 角色

    • 分為 Publisher ( 訊息發布者 )、 Subscriber ( 訊息接收者 )、Broker ( 代理人 ) 三個角色
    • Publisher 與 Subscriber 之間有 Broker 當作中繼站,所以 Publisher 與 Subscriber 不需要知道彼此的 IP 位址
    • Publisher 與 Subscriber 之間透過 Topic ( 主題 ) 來取得需要的資訊
  • 動作

    • Publisher 向 Broker 發送 Publish
    • Subscriber 向 Broker 發送 Subscribe
  • 運作方式

  • Subscriber 會向 Broker 訂閱 ( Subscribe ) 特定的主題 ( Topic ),例如:【 Subscriber 1 】向 Broker 訂閱【 Sensor/Temperature/Room2 】的特定 Topic
  • Publisher 會向 Broker 發布 ( Publish ) 特定的主題 ( Topic ) ,例如:【 Publisher 1 】發布【 Sensor/Temperature/Room2 】的特定 Topic
  • Broker 會判斷 Publisher 所發布的特定 Topic 是否有 Subscriber 訂閱此特定 Topic,如有的話會將此特定 Topic 的訊息傳送給 Subscriber

Topic 命名

  • 主題名稱請使用英文,並取個有意義的名字
  • 區分英文大小寫
  • 主題名稱請勿使用【 $ 】、【 # 】、【 + 】、【 - 】、【 * 】、【 空格 】等字元
  • 階層數沒有固定
  • 長度不可超過 65536 個字元

主題萬用字元 ( Topic WildCard Characters )

  • WildCard 字元
    • 【 # 】多層級
    • 【 + 】單一層級
  • 使用方式 ( 依上圖樹狀結構來取資料 )
    • 例如:取得 Room1 的溫度
      • Sensor/Temperature/Room1
    • 例如:取得全部房間的溫濕度
      • Sensor/#
    • 例如:取得 Room1 的溫度與濕度
      • Sensor/+/Room1

QoS ( Quality of Service )

  • QoS 0

    • 特性

      • at most once ( 最多傳一次 )
      • 訊息送出後就不管
    • 優點
      • 佔用頻寬與傳送時間較少
    • 缺點
      • 會有遺漏資料的可能性,如果遺漏資料不會對結果造成太大影響的情況下亦可使用
  • QoS 1

    • 特性

      • at least once ( 至少傳一次 )
      • Broker 從 Publisher 收到訊息後,會回應Publisher 一個 PUBACK 訊息以確認有收到要發布的訊息
      • 當 Publisher 沒有收到 PUBACK 訊息,則 Publisher 會再重送此訊息
    • 優點
      • 佔用頻寬與傳送時間較少較 Qos 2 少
    • 缺點
      • 有可能會重複收到相同訊息,Subscriber 要自行篩選所接收到的相同訊息
  • QoS 2

    • 特性

      • exactly once ( 確實傳送一次 )
      • Broker 從 Publisher 收到訊息後,將回應 Publisher 一個 PUBREC 訊息以確認有收到要發布的訊息
      • Publisher 如果收到 Broker 傳送的 PUBREC 訊息時,會再傳送 PUBREL 訊息給 Broker,告訴 Broker 可以釋放訊息
      • 此時 Broker 會把訊息傳送給有訂閱此主題的 Subscriber,當傳送完成後會回應 PUBCOMP 訊息給 Publisher 告知已經發送完畢
    • 優點
      • 不會重覆傳送相同訊息
    • 缺點
      • 佔用頻寬與傳送時間較多

Reference
GitHub
List of blogs
ALL RIGHTS RESERVED. COPYRIGHT © 2018. Designed and Coded by Makee.io