嗨!又好長一段時間沒寫文了(其實根本就沒寫幾篇)
前陣子 Boss 要我準備一堂 IoT 相關的課程,並且要教大家怎麼架設 MQTT Broker。
也就是說…學弟妹在老闆課堂上看到的簡報或是程式範例,可能是我做的~
為了造福學弟妹日後的作業…
什麼是 MQTT ?
MQTT 為 Message Queuing Telemetry Transport 的縮寫,它是一個基於發布/訂閱架構的傳輸協定(ISO/IEC 20922),並且具有輕量、雙向以及高擴展性的特性,因此廣泛的應用在物聯網之中。
MQTT 的運作模式
在 MQTT 當中分為 MQTT broker 以及 MQTT client 兩個角色。MQTT Broker 通常不會主動傳輸訊息,而是作為訊息代理,有點像是小時候的傳直條,請旁邊的同學幫忙傳給心儀的對象,而這位同學的角色就像是 MQTT Broker,負責發訊息與收訊息的就是 MQTT client 啦!
大家都來找同一個 Broker 傳訊息,要怎麼知道哪一張紙條要傳到哪裡呢?這就要提到 MQTT 的主題(topic)。MQTT client 可以向 Broker 訂閱特定主題,當 Broker 收到訊息時,會根據主題,將訊息派發給有訂閱的 MQTT Client。
MQTT 的主題(Topic)
MQTT 的主題使用 ufw-8 編碼,並以斜線字元區分節層。基本上都沒有什麼太大的限制,最大的限制就是必須在 65,535 bits 之內。
舉個例子:
- my-house/living-room/temperature
- school/room-106/switch
MQTT 也有一些比較特殊的字元,像是:
+
: 作為單層的通用字元,用來表示該層級所有主題。
舉例來說:A/B/+
可以匹配下列主題
- A/B/C
- A/B/Y
但是與下列主題不相符
- A/C/D
- A/B/C/D#
: 為多層的通用字元,表示該層級以下的所有主題。
舉例來說:A/B/#
可以匹配下列主題
- A/B/C
- A/B/Y
- A/B/C/D
但是與下列主題不相符
- A/C/D$
: 通常為系統控制的字元。主要用於獲取 MQTT Broker 的運作狀態、連線資訊或是運行紀錄等資料。
參考資料: