簡介
MQTT屬於是物聯網的通信協議,在MQTT協議中有兩大角色:客戶端(發布者/訂閱者),服務端(Mqtt broker);針對客戶端和服務端需要有遵循該協議的的具體實現,EMQ/EMQ X就是MQTT Broker的一種實現。
EMQ官網:https://www.emqx.com/zh/products/emqx
EMQ X 基於 Erlang/OTP 平台開發的 MQTT 消息服務器,是開源社區中最流行的 MQTT 消息服務器。
EMQ X 是開源百萬級分布式 MQTT 消息服務器(MQTT Messaging Broker),用於支持各種接入標准 MQTT 協議的設備,實現從設備端到服務器端的消息傳遞,以及從服務器端到設備端的設備控制消息轉發。從而實現物聯 網設備的數據采集,和對設備的操作和控制。
為什么選擇EMQ X
到目前為止,比較流行的 MQTT Broker 有幾個:
-
Eclipse Mosquitto: https://github.com/eclipse/mosquitto 使用 C 語言實現的 MQTT Broker。Eclipse 組織還還包含了大量的 MQTT 客戶端項目: https://www.eclipse.org/paho/#
-
EMQX: https://github.com/emqx/emqx 使用 Erlang 語言開發的 MQTT Broker,支持許多其他 IoT 協議比如 CoAP、LwM2M 等
-
Mosca: https://github.com/mcollina/mosca 使用 Node.JS 開發的 MQTT Broker,簡單易用。
-
VerneMQ: https://github.com/vernemq/vernemq 同樣使用 Erlang 開發的 MQTT Broker
從支持 MQTT5.0、穩定性、擴展性、集群能力等方面考慮,EMQX 的表現應該是最好的。
-
EMQ X 支持豐富的物聯網協議,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket 等;
-
優化的架構設計,支持超大規模的設備連接。企業版單機能支持百萬的 MQTT 連接;集群能支持千萬級 別的 MQTT 連接;
-
易於安裝和使用;
-
靈活的擴展性,支持企業的一些定制場景;
-
EMQ X 3.0 支持 MQTT 5.0 協議,是開源社區中第一個支持 5.0協議規范的消息服務器,並且完全兼容 MQTT V3.1 和 V3.1.1 協議。除了 MQTT 協議之外,EMQ X 還支持別的一些物聯網協議
-
單機支持百萬連接,集群支持千萬級連接;毫秒級消息轉發。EMQ X 中應用了多種技術以實現上述功能
-
擴展模塊和插件,EMQ X 提供了靈活的擴展機制,可以實現私有協議、認證鑒權、數據持久化、橋接轉發和管理控制台等的擴展
-
橋接:EMQ X 可以跟別的消息系統進行對接,比如 EMQ X Enterprise 版本中可以支持將消息轉發到 Kafka、RabbitMQ 或者別的 EMQ 節點等
-
共享訂閱:共享訂閱支持通過負載均衡的方式在多個訂閱者之間來分發 MQTT 消息。比如針對物聯網等 數據采集場景,會有比較多的設備在發送數據,通過共享訂閱的方式可以在訂閱端設置多個訂閱者來實現這 幾個訂閱者之間的工作負載均衡
EMQ X 產品介紹
EMQ X 公司主要提供三個產品,可在官網首頁產品導航查看每一種產品;主要體現在支持的連接數量、產品 功能和商業服務等方面的區別:
- EMQ X Broker:EMQ X 開源版,完整支持 MQTT V3.1.1/V5.0 協議規范,完整支持 TCP、TLS、 WebSocket 連接,支持百萬級連接和分布式集群架構;LDAP, MySQL, Redis, MongoDB 等擴展插件集成,支持插件模式擴展服務器功能;支持跨 Linux、Windows、macOS 平台安裝,支持公有雲、私有雲、K8S/容器 部署
- EMQ X Broker:EMQ X 開源版,完整支持 MQTT V3.1.1/V5.0 協議規范,完整支持 TCP、TLS、 WebSocket 連接,支持百萬級連接和分布式集群架構;LDAP, MySQL, Redis, MongoDB 等擴展插件集成,支 持插件模式擴展服務器功能;支持跨 Linux、Windows、macOS 平台安裝,支持公有雲、私有雲、K8S/容器 部署
- EMQ X Platform:EMQ X 平台版,EMQ X Platform 是面向千萬級超大型 IoT 網絡和應用,全球首選電 信級物聯網終端接入解決方案。千萬級大容量;多物聯網協議;電信級高可靠;卓越 5G 網絡支持;跨雲跨 IDC 部署;兼容歷史系統;完善的咨詢服務(從咨詢到運維)
rpm安裝
wget https://www.emqx.com/zh/downloads/broker/4.3.5/emqx-centos7-4.3.5-amd64.rpm
sudo yum install emqx-centos7-4.3.5-amd64.rpm -y
#啟動命令
sudo emqx start
emqx_ctl status
安裝完成后,emqx會有一個默認的網頁控制台,端口為18083,默認賬號密碼:admin/public
emqx服務停止命令:
sudo emqx stop
使用websocket進行消息收發案例
在EMQ X Broker提供的 Dashboard 中 TOOLS 導航下的 Websocket 頁面提供了一個簡易但有效的 WebSocket 客戶端工具,它包含了連接、訂閱和發布功能,同時還能查看自己發送和接收的報文數據,我們期望它可以幫助您快速地完成某些場景或功能的測試驗證:
客戶端點擊連接:
點擊訂閱主題:
點擊發送消息:
EMQ X 目錄結構
不同安裝方式得到的 EMQ X 其目錄結構會有所不同,具體如下:
描述 | 使用 ZIP 壓縮包安裝 | 使用二進制包安裝 | Homebrew(MacOS)安裝 |
---|---|---|---|
可執行文件目錄 | ./bin |
/usr/lib/emqx/bin |
/usr/local/bin |
數據文件 | ./data |
/var/lib/emqx/data |
/usr/local/Cellar/emqx/*/data |
Erlang 虛擬機文件 | ./erts-* |
/usr/lib/emqx/erts-* |
/usr/local/Cellar/emqx/*/erts- |
配置文件目錄 | ./etc |
/etc/emqx |
/usr/local/Cellar/emqx/*/etc |
依賴項目錄 | ./lib |
/usr/lib/emqx/lib |
/usr/local/Cellar/emqx/*/lib |
日志文件 | ./log |
/var/log/emqx |
/usr/local/Cellar/emqx/*/log |
啟動相關的腳本、schema 文件 | ./releases |
/usr/lib/emqx/releases |
/usr/local/Cellar/emqx/*/releases |
以上目錄中,用戶經常接觸與使用的是 bin
、etc
、data
、log
目錄。
bin 目錄
emqx、emqx.cmd
EMQ X 的可執行文件
emqx start
后台啟動 EMQ X Broker;
emqx stop
關閉 EMQ X Broker;
emqx restart
重啟 EMQ X Broker;
emqx console
使用控制台啟動 EMQ X Broker;
emqx foreground
使用控制台啟動 EMQ X Broker,與
emqx console
不同,emqx foreground
不支持輸入 Erlang 命令;
emqx ping
Ping EMQ X Broker
emqx_ctl、emqx_ctl.cmd
EMQ X 提供了 ./bin/emqx_ctl
的管理命令行,用於用戶對 EMQ X 進行管理、配置、查詢
具體可參考:https://docs.emqx.cn/broker/v4.3/advanced/cli.html#status-命令
etc 目錄
EMQ X 通過 etc
目錄下配置文件進行設置,主要配置文件包括:
配置文件 | 說明 |
---|---|
emqx.conf | EMQ X 配置文件 |
acl.conf | EMQ X 默認 ACL 規則配置文件 |
plugins/*.conf | EMQ X 各類插件配置文件 |
certs | EMQ X SSL 證書文件 |
emqx.lic | License 文件僅限 EMQ X Enterprise |
data 目錄
EMQ X 將運行數據存儲在 data
目錄下,主要的文件包括:
configs/app.*.config
EMQ X 讀取 etc/emqx.conf
和 etc/plugins/*.conf
中的配置后,轉換為 Erlang 原生配置文件格式,並在運行時讀取其中的配置。
loaded_plugins
loaded_plugins
文件記錄了 EMQ X 默認啟動的插件列表,可以修改此文件以增刪默認啟動的插件。loaded_plugins
中啟動項格式為 {<Plugin Name>, <Enabled>}.
,<Enabled>
字段為布爾類型,EMQ X 會在啟動時根據 <Enabled>
的值判斷是否需要啟動該插件
$ cat loaded_plugins
{emqx_management,true}.
{emqx_recon,true}.
{emqx_retainer,true}.
{emqx_dashboard,true}.
{emqx_rule_engine,true}.
{emqx_bridge_mqtt,false}.
mnesia
Mnesia 數據庫是 Erlang 內置的一個分布式 DBMS,可以直接存儲 Erlang 的各種數據結構。
EMQ X 使用 Mnesia 數據庫存儲自身運行數據,例如告警記錄、規則引擎已創建的資源和規則、Dashbaord 用戶信息等數據,這些數據都將被存儲在 mnesia
目錄下,因此一旦刪除該目錄,將導致 EMQ X 丟失所有業務數據。
可以通過 emqx_ctl mnesia
命令查詢 EMQ X 中 Mnesia 數據庫的系統信息
log 目錄
emqx.log.*
EMQ X 運行時產生的日志文件
crash.dump
EMQ X 的崩潰轉儲文件,可以通過 etc/emqx.conf
修改配置
erlang.log.*
以 emqx start
方式后台啟動 EMQ X 時,控制台日志的副本文件。