Webinar

EMQ「技术之夏」直播季火热来袭!| 立即报名

enterprise 5.0.4 更新日志

增强功能

  • #10389 统一 cluster.core_nodescluster.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 上管理插件,不需要手动修改配置,因此我们将插件配置调整到更靠后的位置。

  • #10491etcd.ssl 重命名为 etcd.ssl_options ,使其与配置文件中其他 SSL 相关配置项保持一致的命名。

  • #10512 改进了数据文件存储格式,现已支持正常存储 Unicode 字符,例如包含 Unicode 字符的规则 SQL SELECT * FROM "t/1" WHERE clientid = "-测试专用-"

  • #10568emqx ctl listeners 命令返回结果添加连接关闭计数指标 shutdown_count

  • #10588 将日志跟踪记录的时间精度从秒提高到微秒。例如,从 2023-05-02T08:43:50+00:002023-05-02T08:43:50.237945+00:00

  • #10623force_shutdown 配置中,将 max_message_queue_len 重命名为 max_mailbox_size ,旧名称作为别名被保留,保证向后兼容性。

  • #10713 为减少歧义与配置复杂度,隐藏 WebHook resource_option.request_timeout 配置项,并使用 http request_timeout 来设置该值。

  • #10075 新增节点再平衡/节点疏散功能,功能设计与使用请参考 EIP文档

  • #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)中减少内存占用。热路径包括在消息处理、连接管理、认证授权等核心功能中被频繁执行的代码。

  • #10591 #10625 改进并简化速率限制器的配置:

    • 降低速率限制器配置的复杂度。

    • 更新 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 中的一些功能:

    • 通过全局锁来保护 mria:join/1,2 函数,避免两个同时试图加入对方的节点之间的冲突 Mria PR

    • 提供了新函数 mria:sync_transaction/4,3,2,该函数会阻止调用者,直到事务被导入到本地节点(当本地节点是复制者时有效,否则它的行为与mria:transaction/3,2 函数完全一样)。

    • 优化 mria:running_nodes/0 函数 Mria PR

    • 优化单个复制节点调用 mria:ro_transaction/2 函数时的性能 Mria PR.

  • #10518 在 Mria 中增加以下修复和功能:

    • 在 mria_membership 中安全地调用 mria_rlog:role/1,以确保mria_membership gen_server 在 RPC 到另一个节点失败时不会崩溃 Mria PR

    • ?rlog_sync 表中添加额外的字段,以方便在未来的扩展这一功能 Mria PR

  • #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_peercacertfile 使用默认配置时,将导致 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})
  • #10746 在规则引擎的测试 API rule_test 中增加对事件$events/delivery_dropped的支持。

  • #10747 移植 4.4 版本中一些规则引擎的时间格式化函数的修复到当前版本。

  • #10760 修复在节点加入集群是访问数据桥接数据统计页面是出现 "internal error 500" 错误的问题。

  • #10801 避免在 API /topics/{topic} 和 /topics 中对主题名进行双重百分号解码。

  • #10817 修复对桥接配置项auto_restart_interval的值的处理,现在支持设置为infinity