发布日期: 2025-07-15
增强
优化用户名配额的性能。
在多节点集群中开启用户名配额功能时,EMQX 节点需要频繁与其他节点同步用户名状态(包含用户名与客户端 ID 的对应关系),从而带来一些性能损耗。改进后,EMQX 通过批量的方式同步用户名状态,从而降低了 CPU 使用率。
用户名配模块新增 “刷新用户名表的间隔时间” 配置项。
为防止某些极端情况下用户名配额表与其他节点不一致,需要定时查看其他节点上的用户名状态信息,并刷新本地的用户名配额表。默认的刷新间隔为 15 分钟,最低可以设置为 30 秒。
重发布动作新增 “发送未定义属性” 选项。
该选项用于控制是否将未定义的 MQTT 属性和用户属性包含在重发布的消息中。启用时,使用
undefined
字符串作为未定义属性的值;禁用时,重发布后的 MQTT 消息中将不包含这个属性。优化 HTTP API 调用在高延迟网络环境下的稳定性
将 HTTP API 调用中需要 RPC 的部分代码改为使用
gen_rpc
实现,避免占用 Erlang 分布式通信使用的 RPC 通道,减少通道阻塞风险。优化内置数据库认证 (auth_mnesia) 的查询性能。
之前,内置认证数据库的查询性能会随着数据库记录数目的增长而下降,导致在客户端高频率或高并发登录时,系统会消耗大量 CPU 资源。优化后,查询性能与记录数无关,提升了认证效率与系统稳定性。
修复
修复集群自动愈合之后,各节点上的路由表或客户端全局注册表不一致的问题。
当集群中两个节点之间的网络发生中断,并且集群分裂为相互重叠的两个分片之后,仅仅重启 “少数节点分片” 会导致集群自愈完成之后,部分数据仍然处于不一致的状态。从用户角度看,问题表现为一些消息无法路由到其他节点上的订阅者,或者是某些客户端无法使用 HTTP API 踢除。
此版本修改了集群自愈的逻辑,统一重启少数节点分片和重叠集群分片里的节点,确保数据一致性恢复。
修复了在某些情况下,HTTP API 调用中的异常会导致 ETS 表内存泄露的问题。
修复网关模块无法通过 Dashboard 增加监听器的问题。
修复前,在创建协议网关模块后,再通过模块更新界面添加监听器时未生效。受影响的协议类型包括 CoAP、GB/T 32960、JT/T 808、LwM2M、MQTT-SN、STOMP 和 TCP。