第 5 章

建立第一個 MQTT 連線

建立第一個 MQTT 連線:使用 EMQX 內建 WebSocket 測試工具與診斷頁 publish/subscribe,驗證 QoS,認識連線與訂閱的基本操作。

為什麼要學這個

你的 add-on 已經把 EMQX 5.8.9 跑起來,但你可能還沒「親眼」看過 MQTT 訊息真正走過 broker。第 4 章建立的都是紙上心智模型,這章就是填補「第一觸」的關鍵一步:用 EMQX 內建的 WebSocket 測試工具,在瀏覽器裡直接 publish 與 subscribe,發出訊息、再在同一個連線上收回來,也實際動手把它們在收到時分派的 QoS 差異看個清楚。

讀完之後,你手上會有一個「想確認 broker 到底通不通」的最快方法——不用安裝第三方程式、不用寫一行程式,就能驗證連線、主題、Payload與 QoS 的行為。後續每一章拿實機測試時,都會反覆回到這隻 WebSocket 工具。

核心概念

MQTT 是發布/訂閱(publish/subscribe)制:發布者把訊息依主題(topic)送出,訂閱者只訂閱自己有興趣的主題,所有訊息都由扮演伺服的 broker 路由。驗證這件事最直接的方式,就是開兩頭:一頭發布、一頭訂閱,看 broker 有沒有把訊息送到的「正確訂閱者」。

EMQX 提供多種工具可以做這件事:客戶端桌面的 MQTTX、命令列的 MQTTX CLI、瀏覽器版的 MQTTX Web,以及 EMQX Dashboard 內建的 WebSocket 客戶端。前幾種都要另外安裝或記工具,內建的那隻不用——它走「MQTT over WebSocket」、預設接連接埠 8083,直接在網頁裡完成 connect、subscribe、publish 三個動作,最適合作為你的「第一個」測試工具。

名詞對照

英文中文一句話
Publish發布把訊息送到某個主題(topic)
Subscribe訂閱宣告想收到哪些主題的訊息
Topic主題訊息分類用的階層名稱
Payload訊息內容發布時實際攜帶的資料
QoS服務品質等級訊息傳遞的保證程度(0/1/2)
Retained保留訊息broker 記住最後一則,新訂閱者立刻收到
WebSocket網頁套件通道讓瀏覽器跑 MQTT 的傳輸方式

動手做

  1. 進到 WebSocket 客戶端

    登入 EMQX Dashboard(帳號密碼第 2 章已改過就用你自己的)。左側選單點 Diagnose → WebSocket Client。

  2. 建立第一筆連線

    在 Connection 區塊中 Host 維持 localhost(從別的裝置進來就改成你的 Home Assistant 位址),Port 維持 8083;還沒建立驗證時 Username/Password 留空。按 Connect,狀態變成 Connected 就是成功。

  3. 訂閱並發布

    在 Subscription 區塊把 Topic 設成 testtopic/#,按 Subscribe。再到 Publish 區塊把 Topic 設 testtopic/1、Payload 填 {"msg":"Hello"}、QoS 先用 0,按 Publish。下方 Received 區會出現同一則訊息,因為你同時也是訂閱者。

  4. 驗證 QoS

    把 Publish 的 QoS 改成 1(甚至 2)再送一筆,觀察訊息一樣抵達 Received。體會「QoS 0 盡力送、QoS 1 至少一次、QoS 2 恰一次」在真實投遞上的差別,到下面「驗證 QoS」主題看三者的適用情境。

WebSocket 測試工具導覽

Diagnose 選單裡有幾個除錯工具:Alarms(警示)、WebSocket Client、Topic Monitoring(主題監控)、Slow Subscriptions(慢訂閱)與 Log Trace(日誌追蹤)。其中 Alarms、Topic Monitoring、Slow Subscriptions 是 EMQX Enterprise 付費版才有,Open Source 的 5.8.9 你實際只會用到 WebSocket Client 與 Log Trace——不必花時間在 Open Source 介面上找 Enterprise 才有的項目。

WebSocket Client 提供 connect、subscribe、publish 三段操作,也會顯示你自己送出的(Published)與收到的(Received)資料。你可以按 + 同時開多筆 WebSocket 連線,各自獨立。有個要注意的行為:只要重整這頁,所有連線與收發資料都會被清空——它是快速測試工具,不是存放連線歷史的地方。

還有一個要留心的坑:Publish 區塊的 Topic 不能帶 + 或 # 萬用字元,只有 Subscription 的主題才能用萬用字元。

驗證 QoS

QoS(Quality of Service,服務品質)是 MQTT 控制單則訊息「投遞保證程度」的機制。EMQX 兩頭都支援三種 QoS,在 WebSocket 工具的訂閱與發布都能選。

QoS名稱保證典型情境
0最多一次不保證送達或重複週期性感應器,輕量丟掉無妨
1至少一次保證送達,但可能重複可接受一兩次重複的狀態變更
2且只有一次保證送達,且不重複開關、控制指示,重複不可

測試時最省的方式,就是發布到一個你自己訂閱的主題:Publisher 與 Subscriber 是同一端時,broker 一樣會把訊息跨接路由回來,於是你可以在 Received 資料列裡親眼確認「QoS 改變後,收到的是不是同一筆、有沒有重複」。想再驗證 Retained(保留訊息),只要發布時勾 Retain,新加入的訂閱者立刻就可以收該主題最後一筆——它與 QoS 是兩件事,心智模型在第 4 章已建立。

故障排除

  • Connect 沒反應或一直失敗:先確認 8083 有沒有被其他服務(如 WebRTC)佔用,這與第 2 章的連接埠衝突同源;若你是從別的裝置進來的,Host 必須填 Home Assistant 主機位址,不是 localhost。
  • 訂閱了卻收不到訊息:檢查你的訂閱主題是否用萬用字元包住發布主題(如訂 testtopic/# 才貼得到 testtopic/1)。發布成功後 Received 區應該要有資料列,一條都沒看到就代表 broker 沒真的路由到。
  • 收到的訊息重複出現:如果你發布選 QoS 1,重複是「至少一次」的正常結果;想精確只有一次就要選 QoS 2,不要以為是 broker 出了問題。
  • 重整頁後連線資料全部消失:這是內建 WebSocket 工具的預設清除行為,不是 bug。若你要保存連線記錄、多組設定,改用桌面工具 MQTTX;它們適合作為持續測試的設備。

常見問題

內建 WebSocket 工具跟 MQTTX 差在哪

內建工具在 EMQX Dashboard 裡,不用安裝、最適合快速看訊;MQTTX(桌面/CLI/Web)功能更豐富,可以保存多組連線、支援更細的 MQTT 5.0 設定,適合持續除錯與開發。兩者通訊能力相同,沒有硬性要用哪一款。

為什麼測試用 8083,而不是 1883

內建工具是「瀏覽器直接在網頁裡跑 MQTT over WebSocket」的通道,走的是 8083;1883 是純 TCP 的 MQTT,瀏覽器不能直接連,要連 1883 得用桌面 MQTTX 或 CLI 等工具。兩者都是 MQTT,只是傳輸層方式不同。

QoS 0、1、2 我到底該選哪個

可丟掉的資料選 0;必須送出但可接受重複的選 1;不能重複的關鍵控制(如開關)選 2。先在三種之間都發布一次,看你在同一個連線收到時的差異,再依實際情境挑選。

工具能同時開多個連線嗎

可以。按 + 可以同時開多支 WebSocket Client,各自有獨立的連線狀態與收發資料列。你若想模擬「publisher 與 subscriber 各一篇」,開兩支連線分別做訂閱與發布會更方便。

官方來源