# 版本发布

# 4.4.6 版本

发布日期: 2022-07-29

# 功能增强

  • 支持对规则引擎中的规则进行搜索和分页
  • 提供 CLI ./bin/emqx check_conf 以主动检查配置是否正确
  • 优化共享订阅性能

# 错误修复

  • 修复热升级后一旦卸载了老版本 EMQX 将无法再次启动的问题
  • 修复多语言协议扩展中对 UDP 客户端的保活检查错误导致客户端不会过期的问题
  • 修复多语言协议扩展中客户端信息没有及时更新的问题
  • 修复客户端指定 Clean Session 为 false 重连时,飞行窗口中的共享订阅消息会被尝试重新派发给旧会话进程的问题
  • 修复 emqx_lua_hook 插件无法取消消息发布的问题

# 4.4.5 版本

发布日期: 2022-06-30

# 功能增强

  • 规则引擎消息重发布动作中的 QoS 和保留消息标识现在可以使用占位符
  • 支持排他订阅,即一个主题只允许存在一个订阅者
  • 现在 Dashboard 和管理 API 的 HTTPS 监听器可以使用受密码保护的私钥文件,提供了 key_password 配置项
  • 支持在主题重写规则中使用占位符 %u%c
  • 支持在消息发布的 API 请求中设置 MQTT 5.0 的 Properties,例如消息过期间隔、响应主题等
  • 优化规则引擎资源创建时的 UI,例如折叠部分不常用的选项等
  • 为 ExHook 底层的 gRPC 连接开放了 KeepAlive、TCP_NODELAY、SO_RCVBUF 和 SO_SNDBUF 共 4 个与 TCP 相关的配置项

# 错误修复

  • 修复 Linux 系统中内存计算不准确的问题,并改为计算当前系统的内存占用,而不是 EMQX 的内存占用
  • 修复 ExHook 在客户端重连时旧的断开连接事件会晚于新的连接事件触发的问题
  • 修复主题重写与延迟发布执行顺序不固定的问题,现在固定为优先执行主题重写
  • 修复规则引擎无法编码 MQTT 5.0 用户属性的问题
  • 修复客户端使用 MQTT v5.0 以下的协议版本接入时 connack.auth_error 计数不准确的问题
  • 修复 LwM2M 和 CoAP 网关的 UDP 监听器无法绑定指定网络接口的问题
  • 修复在配置文件中移除默认的 Dashboard 用户后 Dashboard 无法启动的问题
  • 修复 client.subscribe 钩子无法拒绝订阅的问题
  • 如果 ACL 规则中的占位符没有被替换,则客户端的发布或订阅操作将被拒绝

# 4.4.4 版本

发布日期: 2022-06-01

# 功能增强

  • 为规则引擎 SQL 增加更多的时间转换函数
  • 为规则引擎 SQL 增加 float2str/2 函数,支持指定浮点输出精度
  • 支持将 JWT 用于鉴权,现在 MQTT 客户端可以使用包含发布订阅白名单的特定声明进行授权
  • 改进认证相关指标使更易理解,现在 client.authenticate = client.auth.success + client.auth.failure
  • 支持 REST API 的监听器绑定到指定的网络接口上
  • 支持对使用内置数据库作为数据源的认证鉴权中的用户数据进行多条件查询和模糊查询
  • 支持将消息队列长度以及丢弃消息数量作为条件查询客户端
  • 支持配置日志时间格式以兼容旧版本中的时间格式
  • use_username_as_clientid 配置为 true 且客户端连接时未指定 username,现在将拒绝连接并返回 0x85 原因码
  • App secret 从部分随机改为完全随机
  • 通过 CLI 进行备份恢复时,不再要求备份文件必须位于 EMQX 数据目录的 backup 文件夹下
  • 现在不兼容版本之间的热升级将被拒绝
  • 允许 EMQX 的安装路径中有空格
  • 引导脚本将在遇到无效的节点名称时快速失败,并提高错误消息的可读性

# 错误修复

  • 修复规则引擎 SQL 函数 hexstr_to_bin/1 无法处理半字节的问题
  • 修复规则引擎资源删除时告警未被清除的问题
  • 修复 Dashboard HTTPS 监听器的 verify 选项未生效的问题
  • 修复共享订阅投递 QoS 1 消息过程中对端会话关闭导致消息丢失的问题
  • 修复日志跟踪功能跟踪大报文时堆大小增长过快而触发连接进程强制关闭策略的问题
  • 修复 MQTT-SN 客户端重传 QoS 2 消息时会被断开连接的问题
  • 修复消息发布 API api/v4/mqtt/publish 中用户属性类型错误导致订阅端连接断开的问题
  • 修复 PostgreSQL 驱动未适配 OTP 24 导致某些认证算法不可用的问题
  • 修复对订阅进行多条件查询时返回结果与查询条件不符的问题
  • 修复规则引擎资源连接测试不工作的问题
  • 修复多项 Dashboard 显示问题

# 4.4.3 版本

发布日期: 2022-04-18

# 功能增强

  • 规则引擎支持重置指定规则的统计指标
  • 规则引擎新增连接确认和鉴权完成事件
  • 规则引擎支持拷贝规则以快速复用
  • 规则引擎 SQL 支持 zip、gzip 等压缩和解压缩函数
  • 改进规则引擎在解析 Payload 失败时的错误提示
  • 优化规则引擎部分资源的连接测试
  • 支持为 ExHook 设置执行优先级
  • ExHook 回调接口新增 RequestMeta meta Protobuf 字段用于返回 EMQX 集群名称
  • 为共享订阅添加 local 策略,这将优先向消息流入的节点下的共享订阅者发送消息。在某些场景下会提升共享消息调度的效率,尤其是在 MQTT 桥接配置为共享订阅时
  • 为 TLS 新增对 RSA-PSK-AES256-GCM-SHA384RSA-PSK-AES256-CBC-SHA384RSA-PSK-AES128-GCM-SHA256RSA-PSK-AES128-CBC-SHA256 四个 PSK 加密套件的支持,从默认配置中移除 PSK-3DES-EDE-CBC-SHAPSK-RC4-SHA 这两个不安全的加密套件
  • 打印 Mnesia wait_for_table 诊断日志
    • 打印 Mnesia 内部统计的检查点
    • 打印每个表加载统计的检查点,帮助定位表加载时间长的问题
  • 严格模式下禁止订阅为空的主题
  • loaded_modulesloaded_plugins 文件不存在时生成默认文件

# 错误修复

  • 修复 TLS 配置项 server_name_indication 设置为 disable 不生效的问题
  • 修复 MongoDB 驱动潜在的进程泄漏问题
  • 修复通过 CLI 命令修改的 Dashboard 默认用户的密码会在节点离开集群后重置的问题
  • 静默 docker-entrypoint.sh 中的 grep 和 sed 命令的运行错误日志
  • 修复 API 路径包含 ISO8859-1 转义字符时,备份文件无法被正确删除和下载
  • 修复 Redis 驱动在 DNS 解析失败等情况下会引发崩溃的问题
  • 修复规则引擎发送数据到 Web 服务动作中 Headers 字段配置不生效的问题
  • 修复 MQTT Bridge 插件仅配置订阅主题但未配置 QoS 时无法启动的问题
  • 创建规则时如果已经有使用相同 ID 的规则存在,现在规则引擎将报错而不是替换已有规则
  • 修复 HTTP 驱动进程池可能无法删除的问题

# 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 将继续保留在包名中以保持向后兼容。

# 功能增强

  • Windows 包支持基于 Erlang/OTP 24 构建。
  • 新增命令行接口 emqx_ctl pem_cache clean,允许强制清除 x509 证书缓存,以在证书文件更新后立即重新加载。
  • 重构 ExProto,以便匿名客户端也可以显示在 Dashboard 上。
  • 桥接中的主题配置项现在可以使用 ${node} 占位符。
  • 严格模式下新增对 MQTT 报文中的 UTF-8 字符串有效性检查。设置为 true 时,无效的 UTF-8 字符串将导致客户端连接断开。
  • MQTT-SN 网关支持会话恢复时主动同步注册主题。
  • 将规则引擎浮点型数据的写入精度从为小数点后 10 位提升至 17 位。
  • EMQX 将在启动时提示如何修改 Dashboard 的初始密码。

# 错误修复

  • 修复 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-21

此补丁版本仅包含 Windows 包的 CI 更改。

# 4.4.0 版本

发布日期: 2022-02-18

注意:

  • 4.4.0 与 4.3.12 保持同步。
  • 当前版本 Windows 包的构建存在一些问题,我们会在下一版本中解决它

此更改集的比较基础是 4.3.12。

# 重要变更

  • 从 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 支持相对路径和自定义访问路径

  • 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 依赖

# 4.4-beta.1 版本

发布日期: 2021-12-21

EMQX 4.4-beta.1 现已正式发布,主要包含以下改动:

# 重要变更

  • 从 4.4 开始,EMQX 的发行包命名将包含 Erlang/OTP 的版本号,例如 emqx-4.4.0-otp24.1.5-3-centos7-arm64.rpm

  • 对于 Debian/Ubuntu 用户,Debian/Ubuntu 包 (deb) 安装的 EMQX 现在可以在 systemd 上运行,这是为了利用 systemd 的监督功能来确保 EMQX 服务在崩溃后重新启动。包安装服务从 init.d 升级到 systemd 已经过验证,但仍建议您在部署到生产环境之前再次验证确认,至少确保 systemd 在您的系统中可用

  • MongoDB 认证支持 DNS SRV 和 TXT Records 解析,可以与 MongoDB Altas 无缝对接

  • 支持动态修改 MQTT Keep Alive 以适应不同能耗策略

  • 集群从 4.3 到 4.4 支持滚动升级。详情请见升级指南。

  • 节点间到 RPC 链接支持配置 TLS. 详情请见集群文档

# 次要变更

  • Dashboard 支持相对路径和自定义访问路径

  • 支持配置是否转发为 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 调用堵塞导致客户端进程失去响应的问题。详见 Erlang/OTP #5346

  • 修复锁管理进程 ekka_locker 在杀死挂起的锁持有者后 Crash 的问题

  • 修复规则引擎 WebHook Action 中的 Path 参数无法使用规则引擎变量的问题

  • 修复 MongoDB 认证模块无法使用 Replica Set 模式等问题

  • 修复集群间消息转发失序问题,相关配置项为 rpc.tcp_client_num

  • 修复内存占用计算错误的问题

  • 修复远程主机无法访问时的 MQTT Bridge 故障问题(连接挂起)

  • 修复 HTTP Headers 可能重复的问题