學習目標
- 了解 MQTT Broker 概念與運作方式
簡介
- 由 IBM 於 1999 年發明,是伺服器與用戶端之間的發布與訂閱的訊息傳輸協定 ( Client Server publish / subscribe messaging transport protocol )
- MQTT 正式變成開放的 OASIS 國際標準
- 適用於 M2M ( Machine to Machine ) 與 IoT ( Internet of Things ) 環境
運作方式
角色
- 分為 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
- 例如:取得 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 告知已經發送完畢
- 優點
- 不會重覆傳送相同訊息
- 缺點
- 佔用頻寬與傳送時間較多