增强功能
#10389 统一
cluster.core_nodes
和cluster.statics.seeds
配置格式,同时支持数组["emqx1@127.0.0.1", "emqx2@127.0.0.1"]
或逗号分隔的字符串"emqx1@127.0.0.1,emqx2@127.0.0.1"
两种格式。#10392 新增函数 date_to_unix_ts/3,用于将格式化的日期转换成整数类型的时间戳:
date_to_unix_ts(TimeUnit, FormatString, InputDateTimeString)
#10426 优化配置优先级机制,修复重启 EMQX 后
etc/emqx.conf
中的配置不生效的问题。有关配置优先级请参考配置重写规则#10457 移除 StatsD 指标监控功能。
#10458 调整插件配置在示例配置文件中的位置,大多数情况下用户都在 Dashboard 上管理插件,不需要手动修改配置,因此我们将插件配置调整到更靠后的位置。
#10491 将
etcd.ssl
重命名为etcd.ssl_options
,使其与配置文件中其他 SSL 相关配置项保持一致的命名。#10512 改进了数据文件存储格式,现已支持正常存储 Unicode 字符,例如包含 Unicode 字符的规则 SQL
SELECT * FROM "t/1" WHERE clientid = "-测试专用-"
。#10568 为
emqx ctl listeners
命令返回结果添加连接关闭计数指标shutdown_count
。#10588 将日志跟踪记录的时间精度从秒提高到微秒。例如,从
2023-05-02T08:43:50+00:00
到2023-05-02T08:43:50.237945+00:00
。#10623 在
force_shutdown
配置中,将max_message_queue_len
重命名为max_mailbox_size
,旧名称作为别名被保留,保证向后兼容性。#10713 为减少歧义与配置复杂度,隐藏 WebHook
resource_option.request_timeout
配置项,并使用http
request_timeout
来设置该值。#10378 新增 Pulsar 数据桥接,目前仅支持单向数据集成即 Pulsar 生产者角色。
#10408 规则 SQL 新增三个内置函数,用于写入日期类型的值到 MongoDB 中。
#10409 #10337 规则引擎新增 Protocol Buffer 和 Apache Avro 格式消息编解码功能。
#10425 新增 OpenTSDB 数据桥接。
#10498 新增 Oracle 数据桥接。
#10560 新增 Apache IoTDB 数据桥接。
#10417 通过解除临时引用来提高配置项读取性能。
#10430 简化
retainer
的配置,将flow_control
标记为不重要的字段。#10511 对资源相关的日志进行脱敏以提升隐私与安全性。
#10525 提高 MQTT 数据包处理的性能。
#10528 在代码的热路径(hot code path)中减少内存占用。热路径包括在消息处理、连接管理、认证授权等核心功能中被频繁执行的代码。
-
降低速率限制器配置的复杂度。
更新
configs/limiter
API。减少速率限制器配置内存占用。
#10487 优化不设置速率限制(
infinity
)时速率限制器的性能表现,减少了内存和 CPU 的使用量。#10490 移除默认
1000/s
的连接速率限制。#10077 QUIC TLS 现已支持密码保护证书文件。
错误修复
#10340 修复通过
systemd
停止 EMQX 时可能导致的日志打印崩溃问题。2023-03-29T16:43:25.915761+08:00 [error] Generic server memsup terminating. Reason: {port_died,normal}. Last message: {'EXIT',<0.2117.0>,{port_died,normal}}. State: [{data,[{"Timeout",60000}]},{items,{"Memory Usage",[{"Allocated",929959936},{"Total",3832242176}]}},{items,{"Worst Memory User",[{"Pid",<0.2031.0>},{"Memory",4720472}]}}]. 2023-03-29T16:43:25.924764+08:00 [error] crasher: initial call: memsup:init/1, pid: <0.2116.0>, registered_name: memsup, exit: {{port_died,normal},[{gen_server,handle_common_reply,8,[{file,"gen_server.erl"},{line,811}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,226}]}]}, ancestors: [os_mon_sup,<0.2114.0>], message_queue_len: 0, messages: [], links: [<0.2115.0>], dictionary: [], trap_exit: true, status: running, heap_size: 4185, stack_size: 29, reductions: 187637; neighbours: 2023-03-29T16:43:25.924979+08:00 [error] Supervisor: {local,os_mon_sup}. Context: child_terminated. Reason: {port_died,normal}. Offender: id=memsup,pid=<0.2116.0>.
#10369 修复
/api/v5/monitor_current
API,修复前,当某些 EMQX 节点出现故障时,该 API 请求会返回 500 和以下信息:{"code":"INTERNAL_ERROR","message":"error, badarg, [{erlang,'++',[{error,nodedown},[{node,'emqx@10.42.0.150'}]], ...
#10407 修复告警崩溃问题
通过使用 Mnesia dirty 操作和避免不必要的调用。
使用 'emqx_resource_manager' 来重新激活已经激活的告警,提高'emqx_alarm'性能。
使用新的安全的 'emqx_alarm' API 来激活/停用告警,确保emqx_resource_manager 不会因为警报超时而崩溃。
当以下条件同时出现时告警系统容易崩溃:
失败的资源数量相对较多,例如,桥接试图激活重复出现的错误的警报。
系统经历了一个非常高的负载。
#10420 修复认证和授权 HTTP 路径可能被多次编码的问题:
- 由于无法假定外部服务器对原始和规范化 URL 的处理方式,因此将尽量避免不必要的 URL 编码,以免导致类似 #10411 的 bug。
#10422 修正单节点集群中,外部插件无法通过环境变量进行配置的问题。
#10448 修复由 e5.0.3 引入的速率限制器配置(用
burst
代替capacity
)的兼容性问题,修复前,如capacity
设为infinity
,将无法从之前的版本进行升级。修复后,capacity = infinity
配置将自动转换为等同的burst = 0
。#10462 废弃已经无效的
broker.shared_dispatch_ack_enabled
配置项 。该配置项旨在避免向存在连接断开客户端的共享订阅组中派发回消息。但实际从 e5.0.0 版本开始,消息会被重新派发到组内的其他已经连接的会话中,该配置已经失效。请参考: https://github.com/emqx/emqx/pull/9104 。#10463 修复数据桥接 API 的错误处理问题,例如 WebHook 桥接 URL 无效时, API 将返回 '400' 而非 '500'。
#10484 修复滚动升级时无法设置配置优先级的问题。例如,在 e5.0.2 中修改了授权的优先级,当通过滚动升级升级到 e5.0.3 时,授权的优先级将被恢复为默认。
#10495 恢复了被误删的速率限制器 API
/configs/limiter
。#10500 修复并增强了 Mria 中的一些功能:
#10518 在 Mria 中增加以下修复和功能:
#10556 加密
emqx_connector_http
携带的Authorization header
。#10571 尝试通过 API 获取主题统计中不存在的主题时,不会产生无意义的崩溃报告。
#10659 修复当
sysmon.os.mem_check_interval
被禁用时,EMQX 无法启动的问题。#10717 修复当飞行窗口拥塞时,缓冲层进程 CPU 占用过高的问题。
#10724 为 HTTP API 文档所有 API 添加摘要字段以便查找 API(访问地址为 "http://<emqx_host_name>:18083/api-docs")。
#10726 对健康检查间隔和自动重启间隔的范围进行验证,支持 1 ms 到 1 小时的时间范围。
#10728 修复规则引擎 SQL
FOREACH - DO
语句执行问题,例如在以下 SQL 语句中:FOREACH payload.date as date, payload.array as elem DO date, elem FROM "t/#" -- {"date": "2023-05-06", "array": ["a"]}
修复前,由
FOREACH
导出的date
变量无法在DO
子句中访问,导致该 SQL 输出如下:[{"elem": "a","date": "undefined"}]
。修复后,该 SQL 语句将能正确输出:
[{"elem": "a","date": "2023-05-06"}]
#10742 在保存授权文件前对规则进行正确性检查,避免由于错误规则导致 EMQX 无法启动。
#10743 修复节点加入集群后,尝试获取桥接信息或指标时可能导致的崩溃问题。
#10755 修复了数据桥接资源更新中的竞争条件。
在 EMQX 的资源更新中,进行了"删除+创建"的操作。如果桥接器的创建时间过长,可能导致 Dashboard 请求超时。如果在桥接创建完成之前进行更新操作,可能会导致桥接被删除。
此修复解决了桥接器资源更新中的竞争条件,确保准确识别和添加新数据桥接,并保持运行时和配置文件状态的一致性。
#10761 修复了 Dashboard Listener 的 SSL 证书的默认值没能被正确设置的问题,当
verify_peer
和cacertfile
使用默认配置时,将导致 HTTPS 无法访问。#10672 修复当监听器中缺少
ssl_options
的默认值导致启动失败的问题。修复前,EMQX_LISTENERS__WSS__DEFAULT__BIND='0.0.0.0:8089' ./bin/emqx console
类似的命令将导致 EMQX 崩溃。#10738 修复 TDengine 数据桥不支持子表以及自动建表问题。在此之前,子表插入 SQL 语句将执行失败:
insert into ${clientid} using msg TAGS (${clientid}) values (${ts},${msg})