「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。
往前文章:
1. EMQ X简介
1. 什么是EMQ X
EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。
MQTT属于是物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务端(Mqtt broker);针对客户端和服务端需要有遵循该协议的的具体实现,EMQ/EMQ X就是MQTT Broker的一种实现。
EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT 协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联 网设备的数据采集,和对设备的操作和控制。
EMQ官网:www.emqx.io/cn/
2. 服务器为什么选 EMQ X
到目前为止,比较流行的 MQTT Broker 有几个:
-
- Eclipse Mosquitto: github.com/eclipse/mos… C 语言实现的 MQTT Broker。Eclipse 组织还还包含了大量的 MQTT 客户端项目:www.eclipse.org/paho/#
-
- EMQX: github.com/emqx/emqx 使用 Erlang 语言开发的 MQTT Broker,支持许多其他 IoT 协议比如 CoAP、LwM2M 等
-
- Mosca: github.com/mcollina/mo… 使用 Node.JS 开发的 MQTT Broker,简单易用。
-
- VerneMQ: github.com/vernemq/ver… 同样使用 Erlang 开发的 MQTT Broker
从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。
与别的MQTT服务器相比EMQ X 主要有以下的特点:
-
经过100+版本的迭代,EMQ X 目前为开源社区中最流行的 MQTT 消息中间件,在各种客户严格的生产环
-
境上经受了严苛的考验;
-
EMQ X 支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket等;
-
优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级别的 MQTT 连接;
-
易于安装和使用;
-
灵活的扩展性,支持企业的一些定制场景;
-
中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;
-
基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github 中,用户可以查看所有源代码。
-
EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议 -单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能,
利用 Erlang/OTP 平台的软实时、高并发和容错(电信领域久经考验的语言) 全异步架构 连接、会话、路由、集群的分层设计 消息平面和控制平面的分离等
-
扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、认证鉴权、数据持久化、桥接转发和管理控制台等的扩展
-
桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到Kafka、RabbitMQ 或者别的 EMQ 节点等
-
共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这几个订阅者之间的工作负载均衡
3. EMQ X 与物联网平台的关系
典型的物联网平台包括设备硬件、数据采集、数据存储、分析、Web / 移动应用等。
EMQ X 位于数据采集这一层,分别与硬件和数据存储、分析进行交互,是物联网平台的核心:
前端的硬件通过 MQTT 协议与位于数据采集层的 EMQ X 交互,通过 EMQ X 将数据采集后,通过 EMQ X 提供的数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和 NOSQL 数据库),或者流式数据处理框架等,上层应用通过这些数据分析后得到的结果呈现给最终用户。
4. 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 Enterprise:EMQ X 企业版,在开源版基础上,支持物联网主流协议 MQTT、MQTT-SN、CoAP/LwM2M、HTTP、WebSocket 一站式设备接入;JT-808/GBT-32960 等行业协议支持,基于 TCP/UDP私有协议的旧网设备接入兼容,多重安全机制与认证鉴权;高并发软实时消息路由;强大灵活的内置规则引擎;企业服务与应用集成;多种数据库持久化支持;消息变换桥接转发 Kafka;管理监控中心;
-
EMQ X Platform:EMQ X 平台版,EMQ X Platform 是面向千万级超大型 IoT 网络和应用,全球首选电信级物联网终端接入解决方案。千万级大容量;多物联网协议;电信级高可靠;卓越 5G 网络支持;跨云跨IDC 部署;兼容历史系统;完善的咨询服务(从咨询到运维);
5. EMQ X 消息服务器有哪些功能
-
完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持
QoS0, QoS1, QoS2 消息支持 持久会话与离线消息支持 Retained 消息支持 Last Will 消息支持
-
TCP/SSL 连接支持
-
MQTT/WebSocket/SSL 支持
-
HTTP 消息发布接口支持
-
$SYS/# 系统主题支持
-
客户端在线状态查询与订阅支持
-
客户端 ID 或 IP 地址认证支持
-
用户名密码认证支持
-
LDAP 认证
-
Redis、MySQL、PostgreSQL、MongoDB、HTTP 认证集成
-
浏览器 Cookie 认证
-
基于客户端 ID、IP 地址、用户名的访问控制 (ACL)
-
多服务器节点集群 (Cluster)
-
支持 manual、mcast、dns、etcd、k8s 等多种集群发现方式
-
网络分区自动愈合
-
消息速率限制
-
连接速率限制
-
按分区配置节点
-
多服务器节点桥接 (Bridge)
-
MQTT Broker 桥接支持
-
Stomp 协议支持
-
MQTT-SN 协议支持
-
CoAP 协议支持
-
Stomp/SockJS 支持
-
延时 Publish ($delay/topic)
-
Flapping 检测
-
黑名单支持
-
共享订阅 ($share/:group/topic)
-
TLS/PSK 支持
-
规则引擎
空动作 (调试) 消息重新发布 桥接数据到 MQTT Broker 检查 (调试) 发送数据到 Web 服务
2. EMQ X服务端环境搭建
EMQ X 目前支持的操作系统:
- Centos6
- Centos7
- OpenSUSE tumbleweed
- Debian 8
- Debian 9
- Debian 10
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04
- macOS 10.13
- macOS 10.14
- macOS 10.15
- Windows Server 2019
产品部署建议 Linux 服务器,不推荐 Windows 服务器。
安装的方式有很多种,可供自由选择:
Shell脚本安装、包管理器安装、二进制包安装、ZIP压缩包安装、Homebrew安装、Docker运行安装、Helm安装、源码编译安装
1. 二进制包安装
从该地址下载最新版本:www.emqx.io/cn/download…
1:执行如下命令执行安装
[root@docker emqx]# rpm -ivh emqx-centos7-v4.0.5.x86_64.rpm
2:安装完成后直接使用如下命令启动emqx
[root@docker emqx]# emqx start
EMQ X Broker v4.0.5 is started successfully!
3:查看emqx broker的启动状态
[root@docker emqx]# emqx_ctl status
Node 'emqx@127.0.0.1' is started
emqx v4.0.5 is running
EMQ X broker提供了Dashboard 以方便用户管理设备与监控相关指标,启动后我们通过访问服务端18083端口 地址:http://192.168.200.129:18083 默认用户名:admin,默认密码:public
4:停止emqx broker请使用如下命令
[root@docker emqx]# emqx stop
ok
5:卸载 EMQ X Broker
[root@docker emqx]# rpm -e emqx
2. docker安装
1:首先拉取emqx的镜像
[root@docker emqx]# docker pull emqx/emqx:v4.0.5
2:使用docker命令运行得到docker容器
[root@docker emqx]# docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p
8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.5
访问Dashboard 查看启动效果!
3. 基本命令
如果采用的是非docker部署的,那么EMQ X提供了一些常用的命令行工具,方便用户对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 Broke
4. 目录结构
不同安装方式得到的 EMQ X 其目录结构会有所不同,具体如下:
以上目录中,用户经常接触与使用的是 bin 、 etc 、 data 、 log 目录。
bin 目录
emqx、emqx.cmd:EMQ X 的可执行文件
emqx_ctl、emqx_ctl.cmd:EMQ X 管理命令的可执行文件
etc 目录
EMQ X 通过 etc 目录下配置文件进行设置,主要配置文件包括:
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 时,控制台日志的副本文件。
5. 配置说明
EMQ X 的配置文件通常以 .conf 作为后缀名,你可以在 etc 目录找到这些配置文件,主要配置文件包括:
需要注意的是,安装方式不同 etc 目录所处的路径可能不同
语法规则
- 采用类似 sysctl 的 k = v 通用格式
- 单个配置项的所有信息都在同一行内,换行意味着创建一个新的配置项
- 键可以通过 . 进行分层,支持按树形结构管理配置项
- 值的类型可以是 integer , fload , percent , enum , ip , string , atom , flag , duration and bytesize
- 任何以#开头的行均被视为注释
6. websocket消息收发
在EMQ X Broker提供的 Dashboard 中 工具 导航下的 Websocket 页面提供了一个简易但有效的 WebSocket 客户端工具,它包含了连接、订阅和发布功能,同时还能查看自己发送和接收的报文数据,我们期望它可以帮助您快速地完成某些场景或功能的测试验证:
具体 Dashboard 如何使用,请关注后续更新文章!