EMQ X:初體驗


簡介

MQTT屬於是物聯網的通信協議,在MQTT協議中有兩大角色:客戶端(發布者/訂閱者),服務端(Mqtt broker);針對客戶端和服務端需要有遵循該協議的的具體實現,EMQ/EMQ X就是MQTT Broker的一種實現。

EMQ官網:https://www.emqx.com/zh/products/emqx

EMQ X 基於 Erlang/OTP 平台開發的 MQTT 消息服務器,是開源社區中最流行的 MQTT 消息服務器。

image-20210726164003412

EMQ X 是開源百萬級分布式 MQTT 消息服務器(MQTT Messaging Broker),用於支持各種接入標准 MQTT 協議的設備,實現從設備端到服務器端的消息傳遞,以及從服務器端到設備端的設備控制消息轉發。從而實現物聯 網設備的數據采集,和對設備的操作和控制。

為什么選擇EMQ X

到目前為止,比較流行的 MQTT Broker 有幾個:

  1. Eclipse Mosquitto: https://github.com/eclipse/mosquitto 使用 C 語言實現的 MQTT Broker。Eclipse 組織還還包含了大量的 MQTT 客戶端項目: https://www.eclipse.org/paho/#

  2. EMQX: https://github.com/emqx/emqx 使用 Erlang 語言開發的 MQTT Broker,支持許多其他 IoT 協議比如 CoAP、LwM2M 等

  3. Mosca: https://github.com/mcollina/mosca 使用 Node.JS 開發的 MQTT Broker,簡單易用。

  4. 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

image-20210726165803592

安裝完成后,emqx會有一個默認的網頁控制台,端口為18083,默認賬號密碼:admin/public

image-20210726165953467

image-20210726170005821

emqx服務停止命令:

sudo emqx stop

使用websocket進行消息收發案例

在EMQ X Broker提供的 Dashboard 中 TOOLS 導航下的 Websocket 頁面提供了一個簡易但有效的 WebSocket 客戶端工具,它包含了連接、訂閱和發布功能,同時還能查看自己發送和接收的報文數據,我們期望它可以幫助您快速地完成某些場景或功能的測試驗證:

image-20210726170612224

客戶端點擊連接:

image-20210726170841814

點擊訂閱主題:

image-20210726170900925

點擊發送消息:

image-20210726170921128

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

以上目錄中,用戶經常接觸與使用的是 binetcdatalog 目錄。

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.confetc/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 時,控制台日志的副本文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM