認識 EMQX 與 MQTT Broker
認識 EMQX 這套開源 MQTT Broker:與 Home Assistant 內建 Mosquitto 的差異、EMQX 5.x 架構與 Dashboard 總覽、叢集概念,以及 Woow EMQX add-on 的定位與能力邊界。
為什麼要學這個
Home Assistant 內建的 Mosquitto 是不少人的第一個 MQTT broker,但它只有陽春的設定檔與零散的連線紀錄。把數十個感應器、開關、遙測全部塞進去之後,你會開始需要一個能一眼看出「誰在線上、誰在訂閱、訊息有沒有送出去」的管理介面——這就是 EMQX 的用武之地。
這章先幫你把 MQTT 的 broker 模型講清楚:publisher(發布者)、subscriber(訂閱者)與 topic(主題)之間為什麼不需要互相認識,broker 在其中扮演什麼角色,以及 EMQX 在這些角色之外多給了哪些現代 broker 該有的東西。之後第 2、3、4 章分別帶你安裝、認識 Dashboard、建立 MQTT 心智模型。
核心概念
MQTT(Message Queuing Telemetry Transport)是物聯網最常用的輕量訊息協定。它不走「客戶端直接找伺服器求資料」的路線,而是用發布/訂閱(publish/subscribe)模式:發布者把訊息依topic(主題)分類送出,訂閱者只訂閱我有興趣的主題;扮演 broker 的伺服器負責路由與過濾所有進來的訊息,再送給所有對該主題有興趣的訂閱者。
這三者的關係是關鍵:發布者與訂閱者完全脫鉤(decoupled),彼此不需要知道對方存在,唯一的共同依據是大家事前約定好的 topic。想新增一個感測器就多一個發布者,想多螢幕就多訂閱者,都不需要改動其他端點。EMQX 支援 MQTT 3.1、3.1.1 與 5.0,能讓 web 瀏覽器直接用 WebSocket 發 MQTT 訊息,這是 Mosquitto 預設沒有的能力。
EMQX 的設計目標就是高並發與高可用。它以 Erlang/OTP 平台為基礎、用全非同步架構、把連線、session、路由與叢集分層設計,並把「訊息收送」與「管理面板」分開,所以單一節點可撐起數百萬等級的連線,也能以多節點組成叢集向外擴展。
名詞對照
| 英文 | 中文 | 一句話 |
|---|---|---|
| MQTT Broker | MQTT 代理伺服器 | 路由你與裝置之間所有訊息的伺服器 |
| Publisher | 發布者 | 把訊息發到某個 topic 的端點 |
| Subscriber | 訂閱者 | 宣告想收到哪些 topic 訊息的端點 |
| Topic | 主題 | 訊息被分類的階層名稱,例如 客廳/溫度 |
| Cluster | 叢集 | 多個節點協同提供單一 broker 服務 |
| Dashboard | 管理面板 | EMQX 內建的網頁管理介面 |
動手做
先看 add-on 有沒有在線
在 Home Assistant 左側按 設定 → 附加元件,找到 Woow EMQX;如果已經安裝,你會看到它運作中的狀態。
開啟 Web UI
點該 add-on 的 開啟 Web UI,讓瀏覽器開 EMQX Dashboard。若還沒進不去,先回到第 2 章完成安裝與啟動。
用預設帳號看一遍
首次登入用使用者名稱
admin、密碼public。系統會要求你改成自己的密碼,改完後再看主介面。找到「版本」在哪
在 Dashboard 找得到版本與授權資訊在哪個頁面,之後第 3 章會帶著你逐一走一遍側欄模組。
EMQX 對照 Mosquitto
如果你是從 Home Assistant 內建的 Mosquitto 換過來,直覺就會想知道「差在哪」。Woow EMQX add-on 的 README 就有一張現成的比較表,重點如下。
| 能力 | Mosquitto | EMQX |
|---|---|---|
| 圖形化管理介面 | 無,靠設定檔 | 有 Dashboard(Web UI) |
| 用戶端管理 | 無 | 即時監控 |
| 規則引擎 | 無 | 有資料整合(Data Integration) |
| WebSocket 支援 | 需額外設定 | 內建 |
| ACL 管理 | 檔案設定 | Web UI 管理 |
| 叢集支援 | 無 | 支援 |
| 資源使用 | 極低 | 中等 |
| 最大連線數 | 數千 | 數百萬 |
結論不是你必須立刻換掉 Mosquitto:若主機吃緊、只需要純 broker,Mosquitto 仍很輕。但如果你想要視覺化管理、訂閱診斷、WebSocket 測試工具、規則引擎與日後擴展,EMQX 的中等資源換來的是顯著更多好用的功能。
EMQX 5.x 架構與叢集
EMQX 5.x 把「控制面板(Dashboard)」與「訊息處理」分層:Dashboard 只是提供視覺化操作,即使不開 Dashboard,EMQX 照常收發訊息。真正處理訊息的引擎是由 Erlang/OTP 組成的框架,以連線、session、route 與 cluster 四個層次設計,格局清晰、也容易向外擴展。
叢集(cluster)是 EMQX 實作高可用的主力:多個 EMQX 節點組成單一 broker 服務,其中的某個節點故障時,MQTT 服務不會中斷;節點數量提高,整體吞吐量也會跟著被拉高。你所在的 add-on 預設是一個節點就夠用,但理解叢集的目的,是為了佈局「未來裝置變多時要往哪邊擴張」的心智模型。
以你的實際設定而言,Woow EMQX add-on 內建的 EMQX 版本是 5.8.9(Open Source),add-on 本身版本為 5.9.0——這個 5.9.0 只多了 ngrok 通道這項功能,底層 broker 仍是 5.8.9。接下來的教學都鎖定 5.8.9 的事實與選單路徑。
故障排除
- 還不清楚 broker 做什麼?:把 broker 想成「郵局/路由器」,publisher 寫好信封(topic)丟進去,broker 只把信送到有訂閱該信封的收件者。訂閱者不認識發信者,發信者也不認識訂閱者。
- 找不到 EMQX 在哪?:先確認 add-on 有安裝且已啟動;若是要獨立開 Dashboard,第 2、3 章會帶你使用連接埠 18083 與 Ingress。
- Mosquitto 與 EMQX 能並存嗎?:兩者都用 1883 埠,不能同時啟動。詳細的處理方法在第 2、8 章的連接埠衝突段落。
- Dashboard 進不去?:先看 add-on Log 有無錯誤,再確認 18083 沒有被其他服務佔用;隧道與 Ingress 設定細節在後續章節。
常見問題
EMQX 是免費的嗎
EMQX Open Source 是開源免費版本,可自建自託管。EMQX Enterprise 是付費的自行客戶/自行部署軟體(一樣自建,但含進階資料整合與進階安全功能);EMQX Cloud 則是 EMQX 另提供的、由官方代管的雲端服務,是自己的雲端 product,與 Enterprise 是不同的分銷管道。本書講的是 Open Source 的 5.8.9。
為什麼不直接用 Home Assistant 的 Mosquitto 就好
Mosquitto 輕量、貼著 Home Assistant 開箱。但長期要管理多裝置、看連線、寫規則、除錯時,EMQX 的 Dashboard、WebSocket、訂閱診斷與資料整合會省下你大量時間。資源允許的話,EMQX 是更進階的選擇。
add-on 版本 5.9.0 跟 EMQX 5.8.9 是什麼關係
add-on 的 5.9.0 是 Woow 修的套件版本,只有在裡面加 ngrok TCP 通道;你真正在跑的 MQTT broker 仍是 EMQX 5.8.9。本書的內容、選單與預設值都對齊 5.8.9。
「叢集」要不要現在就裝二台
不需要。你只要先懂「叢集 = 多節點共享一個 broker、單點故障不中斷」這個概念就好。家用單節點完全足夠;叢集可以等裝置多了,真的有吞吐量或備援需求再規劃。