# 版本发布
# 4.4.3 版本
发布日期: 2022-04-18
# 功能增强
- 编解码现已支持使用 gRPC 服务将任意二进制有效负载解码为 JSON 数据
- 支持使用 TLS 连接到 Pulsar
- 规则引擎 SQL 新增
mongo_date
函数,支持将时间戳保存为 MongoDB Date 对象 - 规则引擎支持重置指定规则的统计指标
- 规则引擎新增连接确认和鉴权完成事件
- 规则引擎支持拷贝规则以快速复用
- 规则引擎 SQL 支持 zip、gzip 等压缩和解压缩函数
- 改进规则引擎在解析 Payload 失败时的错误提示
- 优化规则引擎部分资源的连接测试
- 支持为 ExHook 设置执行优先级
- ExHook 回调接口新增
RequestMeta meta
Protobuf 字段用于返回 EMQX 集群名称 - 为共享订阅添加
local
策略,这将优先向消息流入的节点下的共享订阅者发送消息。在某些场景下会提升共享消息调度的效率,尤其是在 MQTT 桥接配置为共享订阅时 - 为 TLS 新增对
RSA-PSK-AES256-GCM-SHA384
、RSA-PSK-AES256-CBC-SHA384
、RSA-PSK-AES128-GCM-SHA256
、RSA-PSK-AES128-CBC-SHA256
四个 PSK 加密套件的支持,从默认配置中移除PSK-3DES-EDE-CBC-SHA
和PSK-RC4-SHA
这两个不安全的加密套件 - 打印 Mnesia
wait_for_table
诊断日志- 打印 Mnesia 内部统计的检查点
- 打印每个表加载统计的检查点,帮助定位表加载时间长的问题
- 严格模式下禁止订阅为空的主题
- 当
loaded_modules
和loaded_plugins
文件不存在时生成默认文件
# 错误修复
- 修复 TLS 配置项
server_name_indication
设置为 disable 不生效的问题 - 修复 MongoDB 驱动潜在的进程泄漏问题
- 修复通过 CLI 命令修改的 Dashboard 默认用户的密码会在节点离开集群后重置的问题
- 静默
docker-entrypoint.sh
中的 grep 和 sed 命令的运行错误日志 - 修复 API 路径包含 ISO8859-1 转义字符时,备份文件无法被正确删除和下载
- 修复 Redis 驱动在 DNS 解析失败等情况下会引发崩溃的问题
- 修复 MQTT Bridge 插件仅配置订阅主题但未配置 QoS 时无法启动的问题
- 创建规则时如果已经有使用相同 ID 的规则存在,现在规则引擎将报错而不是替换已有规则
- 修复 HTTP 驱动进程池可能无法删除的问题
- 修复模块参数更改报错后无法再次更新的问题
- 修复 Dashboard 中 GB/T 32960 接入网关模块部分字段类型错误问题
- 修复 Kafka、Pulsar 等 Bridge 资源的配置无法更新的问题
- 修复启用匿名认证时 JT/T 808 客户端认证失败的问题
# 4.4.2 版本
发布日期: 2022-04-01
# 重要变更
- 对于 Docker 镜像,配置目录
/opt/emqx/etc
已经从 VOLUME 列表中删除,这使用户可以更容易地使用更改后的配置来重建镜像。 - CentOS 7 Erlang 运行系统在 OpenSSL-1.1.1n(之前是 1.0)上重建,在 v4.3.13 之前,客户端使用某些密码套件时,EMQX 将无法成功握手并触发
malformed_handshake_data
异常。 - CentOS 8 Erlang 运行时系统在 RockyLinux 8 上重新构建。
centos8
将继续保留在包名中以保持向后兼容。
# 功能增强
- 规则引擎桥接数据到 Pulsar 新增对 Pulsar proxy 的支持。
- 为 Kafka 生产者增加 OOM 保护。
- 新增命令行接口
emqx_ctl pem_cache clean
,允许强制清除 x509 证书缓存,以在证书文件更新后立即重新加载。 - 重构 ExProto,以便匿名客户端也可以显示在 Dashboard 上。
- 桥接中的主题配置项现在可以使用
${node}
占位符。 - 严格模式下新增对 MQTT 报文中的 UTF-8 字符串有效性检查。设置为
true
时,无效的 UTF-8 字符串将导致客户端连接断开。 - MQTT-SN 网关支持会话恢复时主动同步注册主题。
- 将规则引擎浮点型数据的写入精度从为小数点后 10 位提升至 17 位。
- EMQX 将在启动时提示如何修改 Dashboard 的初始密码。
# 错误修复
- 修复
MQTT Subscriber
模块无法使用双向 SSL 连接的问题。 - 修复
PSKFile
模块启动失败的问题。 - 修复
Kafka 消费组
模块无法处理二进制数据的问题。 - 修复日志追踪功能无法停止的问题。
- 修复规则引擎持久化数据到 Oracle 和 Lindorm 的动作(仅限同步操作)执行失败时无法触发备选动作的问题。
- 修复规则引擎数据持久化到 Oracle 失败但成功计数仍然增加的问题。
- 修复部分 zone 配置无法清除的问题。
- 修复部分监控告警配置的修改在重启后失效的问题。
- 修复编解码功能在集群环境下不可用的问题。
- 修复集群环境下 LwM2M 客户端列表查询 API 返回数据错误导致无法访问 LwM2M 网关模块管理页面的问题。
- 修复 JT/T 808 位置报告报文解析错误的问题。
- 修复 el8 安装包在 Amazon Linux 2022 上无法启动的问题,错误内容为
errno=13 Permission denied
。 - 修复某些情况下如果连接进程阻塞,客户端无法重连的问题,现在等待超过 15 秒无响应将强制关闭旧的连接进程。
- 修复规则引擎资源不可用时查询资源请求超时的问题。
- 修复热升级运行失败后再次运行出现
{error, eexist}
错误的问题。 - 修复向不存在的主题别名发布消息会导致连接崩溃的问题。
- 修复通过 HTTP API 在另一个节点上查询 lwm2m 客户端列表时的 500 错误。
- 修复主题订阅的 HTTP API 在传入非法的 QoS 参数时崩溃的问题。
- 修复通过多语言协议扩展功能接入的连接进程异常退出时未释放相关资源导致连接计数不更新的问题。
- 修复
server_keepalive
配置项的值会被错误应用于 MQTT v3.1.1 客户端的问题。 - 修复 Stomp 客户端无法触发
$event/client_connection
事件消息的问题。 - 修复 EMQX 启动时系统内存告警误激活的问题。
- 修复向 MQTT-SN 客户端成功注册主题时没有重传此前因未注册主题而投递失败的消息的问题。
- 修复
loaded_plugins
文件中配置了重复的插件时 EMQX 启动输出错误日志的问题。 - 修复 MongoDB 相关功能在配置不正确时输出过量错误日志的问题。
- 增加对 Dashboard User 与 AppID 的格式检查,不允许出现
/
等特殊字符。 - 将踢除客户端时返回的 DISCONNECT 报文中的原因码更正为
0x98
。 - 代理订阅将忽略为空的主题。
# 4.4.1 版本
发布日期: 2022-02-18
注意: 4.4.1 与 4.3.7 保持同步。
此更改集的比较基础是 4.4.0。
# 重要变更
- 我们在 4.4.1 中修复了 License 总连接数计算的 Bug,License 将正确地检查集群的总连接数,而非错误地仅检查每个节点上的连接数。请计划升级的用户注意此变化可能导致的客户端达到 License 限制而无法连接的可能性。
- 慢订阅功能改进,支持统计消息传输过程中花费的时间,并记录和展示耗时较高的客户端和主题。
- 规则引擎支持 Lindorm 数据库
- 支持客户端级别的消息丢弃统计指标
- 优化 Dashboard 上在线 Trace 日志显示,支持语法高亮
# 次要变更
- license 连接数预警,默认连接数达到证书允许的 80% 则告警,小于 75% 时解除告警。用户也可在
emqx.conf
中进行自定义:license.connection_high_watermark_alarm
,license.connection_low_watermark_alarm
- license 过期预警,当有效期小于 30 天时,会告警提示
- 规则引擎支持为客户端消息异常丢失事件配置规则与动作,以增强用户在这一场景的自定义处理能力
- 改进规则引擎 SQL 匹配执行过程中的相关统计指标
- 客户端模糊搜索支持
*
,(
,)
等特殊字符 - 改进 ACL 相关统计指标,解决命中 ACL 缓存导致计数不增加的问题
- Webhook 事件通知中新增
connected_at
字段 - 在因持有锁太久而终止客户端状态之前记录客户端状态
# 问题修复
- 修复数据导入导出在某些情况下不可用的问题
- Module 更新机制改进,解决更新失败后 Module 不可用的问题
- 修复规则引擎在执行比较大小的语句时候未进行类型检查的问题
- 修复更新规则引擎动作后相关计数清零的问题
- 修复 Metrics 接口默认情况下不返回 client.acl.deny 等认证鉴权指标的问题
- 修复订阅查询接口未返回分页数据的问题
- 修复 STOMP 处理 TCP 粘包时解析失败的问题
- 修复客户端过滤查询时会话创建时间选项不可用的问题
- 修复重启后内存告警可能不会触发的问题
- 修复
emqx_auth_mnesia
插件中存在用户数据时导入数据崩溃的问题
# 4.4.0 版本
发布日期: 2021-12-21
EMQX 4.4.0 现已正式发布,主要包含以下改动:
# 重要变更
从 4.4 开始,EMQX 的发行包命名将包含 Erlang/OTP 的版本号,例如
emqx-ee-4.4.0-otp24.1.5-3-centos7-arm64.rpm
对于 Debian/Ubuntu 用户,Debian/Ubuntu 包 (deb) 安装的 EMQX 现在可以在 systemd 上运行,这是为了利用 systemd 的监督功能来确保 EMQX 服务在崩溃后重新启动。包安装服务从 init.d 升级到 systemd 已经过验证,但仍建议您在部署到生产环境之前再次验证确认,至少确保 systemd 在您的系统中可用
规则引擎 InfluxDB 集成新增对 InfluxDB v2 API 的支持,规则引擎现已支持 InfluxDB 2.0 与 InfluxDB Cloud
规则引擎新增对 SAP Event Mesh 的支持
规则引擎新增对超融合时空数据库 MatrixDB 的支持
MongoDB 集成支持 DNS SRV 和 TXT Records 解析,可以与 MongoDB Altas 无缝对接
新增在线 Trace 功能,用户可以在 Dashboard 上完成对客户端和主题的追踪操作,以及查看或下载追踪日志
新增慢订阅统计功能,用以及时发现生产环境中消息堵塞等异常情况
支持动态修改 MQTT Keep Alive 以适应不同能耗策略
集群从 4.3 到 4.4 支持滚动升级。详情请见升级指南。
节点间的 RPC 链接支持配置 TLS. 详情请见集群文档
# 次要变更
Dashboard 支持查看客户端活跃连接数
Dashboard 支持相对路径和自定义访问路径
Dashboard 移除选项卡导航
支持配置是否将整型数据以浮点类型写入 InfluxDB
支持配置是否转发为 Payload 为空的保留消息,以适应仍在使用 MQTT v3.1 的用户,相关配置项为
retainer.stop_publish_clear_msg
多语言钩子扩展(exhook)支持动态取消客户端消息的后续转发
规则引擎 SQL 支持在 FROM 子句中使用单引号,例如:
SELECT * FROM 't/#'
优化内置访问控制文件模块的使用交互
将
max_topic_levels
配置项的默认值更改为 128,以前它没有限制(配置为 0),这可能是潜在的 DoS 威胁改进了接收到 Proxy Protocol 报文但
proxy_protocol
配置项未开启时的错误日志内容为网关上报消息添加额外的消息属性。来自 CoAP, LwM2M,Stomp,ExProto 等网关的消息,在转换为 EMQX 的消息时,添加例如协议名称,协议版本,用户名,客户端 IP 等字段,可用于多语言钩子扩展
HTTP 性能优化
将 openssl-1.1 添加到 RPM 依赖
# 问题修复
修复节点间 RPC 调用堵塞导致客户端进程失去响应的问题
修复锁管理进程
ekka_locker
在杀死挂起的锁持有者后 Crash 的问题修复 RocketMQ 异步写入时数据乱码问题
修复 RocketMQ 统计指标不准的问题
修复集群节点数量超过七个时 Dashboard 监控页面的显示错误
修复规则引擎保存数据到 MySQL 时可能出现较高失败率的问题
修复规则引擎 Clickhouse 离线消息功能不可用的问题
修复规则引擎 MongoDB 离线消息功能中 Max Returned Count 选项无法使用的问题
修复规则引擎 WebHook Action 中的 Path 参数无法使用规则引擎变量的问题
修复 MongoDB 认证模块无法使用 Replica Set 模式等问题
修复集群间消息转发失序问题,相关配置项为
rpc.tcp_client_num
修复内存占用计算错误的问题
修复部分热配置失效的问题
修复远程主机无法访问时的 MQTT Bridge 故障问题(连接挂起)
修复 HTTP Headers 可能重复的问题