# EMQX笔记概要
作者:zhoukun 创建时间:20220228
培训结束时间:20220302
emqx官网文档链接:https://docs.emqx.com/zh/ (opens new window) 发布订阅模式参考地址:https://www.jianshu.com/p/d755909b85f8 (opens new window) MQTT协议参考地址:https://network.51cto.com/article/670429.html (opens new window)
# 背景
在罗万物联网平台的搭建过程中,由于对外需要提供鉴权的功能,我们选择了当下比较流行的消息服务引擎,一个是RocketMq,一个是Emqx进行分析选型;在研究的过程中,发现RocketMq的鉴权不是很符合我们的预期:一、RocketMq的部署流程复杂,需要掌握的知识点比较多,显得比较重量级;二、鉴权需要针对AccessValidator 接口进行另外的实现,开发可插拔的package,由于本人能力有限,没有实现该功能,有兴趣的可以自行研究下。而Emqx就显得比较轻量级,一、基于 Erlang/OTP 平台开发,而Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台;二、单节点支持百万连接,支持多种物联网协议,包括MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 及私有协议等;三、ACL支持内置配置文件和外部数据源插件,外部数据源包括(MySQL (opens new window),PostgreSQL (opens new window),Redis (opens new window),MongoDB (opens new window));考虑到以后对接第三方平台,涉及的物联网协议较多,最终选择了Emqx作为公司物联网平台的消息服务中间件。
# 一、功能介绍
# 1.鉴权
# 1.流程图如下
# 2.内置与外部数据源
# 2.连接与速率限制
当客户端连接请求速度超过指定限制的时候,暂停新连接的建立;
当客户端消息接收速度超过指定限制的时候,暂停接收消息;
速率限制可在
etc/emqx.conf
中配置配置项 类型 默认值 描述 listener.tcp.external.max_conn_rate Number 1000 单节点上允许的最大连接速率 (conn/s) zone.external.rate_limit.conn_messagess_in Number,Duration 无限制 单连接上允许的最大发布速率 (msg/s) zone.external.rate_limit.conn_bytes_in Size,Duration 无限制 单连接上允许的最大报文接收速率 (bytes/s) listener.tcp.external.active_n Number 100 单连接上每次从 TCP 栈读取多少条消息 conn_messages_in
和conn_bytes_in
提供的都是针对单个连接的限制,EMQX 目前没有提供全局的消息速率限制速率限制的原理
- 流程图1如下
# 3.告警
官网上有详细的介绍,我这里只针对通过通过emqx的插件,将emqx的数据源输出到prometheus服务中,然后通过grafana进行可视化展示。
详情见官方文档:告警介绍
emqx的插件都在/etc/emqx/plugins这个路径下,而我们需要的插件是emqx_prometheus,该插件中配置如下
配置项名称 配置项值 描述 prometheus.push.gateway.server http://127.0.0.1:9091 指定 Prometheus gateway 的 URI prometheus.interval 15000 指定 Stats 数据的收集间隔,单位: 毫秒 # 4.消息保留
- 发送给服务端的消息,retain标志位需要为1,这样的话,服务端的路由在转发消息的同时,也会将消息存储在内存及硬盘中。
- 消息的保留需要将/etc/emqx.conf中mqtt.retain_available=true才会启用,同时需要将/etc/emqx/plugins插件下的emqx_retainer开启才会生效。
- 详情见官方文档:消息保留
# 5.消息保留
emqx的版本需要是4.2.0以上的版本,支持4.2.0 -> 4.2.1,4.2.2;但从4.2.0直接升级到4.3.0是不支持的,目前仅支持 Patch 版本(Patch 版本是版本号的第三位),windows,macos暂不支持热升级,版本文件需要放到/emqx/releases/的目录下,通过emqx的命令进行操作。
详情见官方文档:emqx版本热升级
# 6.使用与部署
# 小记
以上只是概叙了在我们物联网中需要使用到的功能和部分插件,emqx还有其它比较强大的功能,没有使用的插件,多种物联网协议,比如规则引擎,数据存储,功能模块等功能,期待大家去了解和探索。