版本发布
e5.1.0
增强
- #11035 (opens new window) 升级 Cassandra 驱动以避免用户名密码在数据桥接日志中泄漏。
- #10584 (opens new window) 为 SSL 通信增加日志等级配置。
- #10678 (opens new window) 优化计数器递增调用以避免在递增为0的情况下计数。
- #10690 (opens new window) 为 Webhook 桥接添加了重试机制,旨在尝试提高吞吐量。 这个优化让客户端可以在请求失败时进行重试,而不会阻塞缓冲层,从而在高消息传输率的情况下提高吞吐量。
- #10702 (opens new window) 引入了一个更直观的配置选项
keepalive_multiplier
,并废弃了旧的keepalive_backoff
配置。在改进之后,EMQX 通过将”客户端请求的 Keepalive 间隔”与keepalive_multiplier
相乘来周期性地检查客户端的 Keepalive 超时状态。 - #10698 (opens new window) 优化了在运行时访问配置的内存使用。
- #10778 (opens new window) 重构 Pulsar 生产者桥接,避免在初始化阶段出现崩溃时资源泄漏。
- #10813 (opens new window) 重构了Kafka 生产者和消费者桥接,避免在初始化阶段出现崩溃时资源泄漏。
- #10858 (opens new window) 规则引擎 SQL 语言新增了一个实用函数 timezone_to_offset_seconds/1。该函数将时区字符串(例如”+02:00”、”Z”和”local”)转换为相应的偏移秒数。
- #10841 (opens new window) 为 Kafka 和 Pulsar 生产者桥接添加了参数校验,以确保在选择了
key_dispatch
策略时消息键参数不为空。 - #10754 (opens new window) 对 MQTT 桥接进行了增强,利用连接池和可用的并行性,大大提高了吞吐量。 因此,单个 MQTT 桥接现在使用一组
clientid
连接到远程代理。 - #10782 (opens new window) 在保留器(retainer)配置中添加了一个新的
deliver_rate
选项,它可以限制保留器中每个会话的最大传递速率。 - #10877 (opens new window) 升级 RocketMQ 驱动程序以增强处理敏感数据的安全性。
- #10598 (opens new window) 在 ExProto 中提供了一种 Unary 类型的回调方法,以避免可能的消息乱序问题。
- #10895 (opens new window) 重构了大部分桥接,避免在初始化阶段出现崩溃时资源泄漏。
- #10790 (opens new window) 通过优化配置读取机制减少读取配置的开销。
- #10892 (opens new window) 在创建 Oracle 数据库桥接时要求设置 SID 或服务名称。
- #10910 (opens new window) 数据桥接资源选项
auto_restart_interval
已被弃用,改为使用health_check_interval
,而request_timeout
则被重命名为request_ttl
。此外,默认的request_ttl
值从 15 秒增加到了 45 秒。 之前同时存在auto_restart_interval
和health_check_interval
会导致混淆,因为这两个参数都会影响数据桥接在故障下的恢复。这两个参数的配置不一致可能导致消息过期而无法重试。现在,health_check_interval
用于控制进行健康检查的间隔,健康检查会将数据桥接转换为disconnected
或connecting
状态,也可以让数据桥接从disconnected
状态中进行恢复。 - #10929 (opens new window) 升级 Erland/OTP 到 25.3.2-1。
- #10909 (opens new window) 移除了网关已弃用的 HTTP API。
- #10908 (opens new window) 重构了 RocketMQ 桥接,避免在初始化阶段出现崩溃时资源泄漏。
- #10924 (opens new window) 重构了 Influxdb 桥接,避免在初始化阶段出现崩溃时资源泄漏。
- #10944 (opens new window) 改进了 GCP PubSub 桥接,以避免在重启节点时可能出现消息发送失败的潜在问题。
- #10933 (opens new window) 支持在 MQTT/TCP 和 MQTT/SSL 监听器中配置 TCP keep-alive。
- #10948 (opens new window) 在一些 HTTP API 中添加了 live_connections 字段,例如:
/monitor_current,/monitor_current/nodes/{node}
/monitor/nodes/{node},/monitor
/node/{node},/nodes
- #10941 (opens new window) 设置
prometheus.vm_dist_collector=disabled
且度量指标erlang_vm_statistics_run_queues_length_total
被重命名为erlang_vm_statistics_run_queues_length
,提高 Prometheus 指标的收集速度。 - #10985 (opens new window) 将
emqx ctl
命令的名称从cluster_call
更名为conf cluster_sync
。旧命令cluster_call
仍然是一个有效的命令,但不包含在帮助信息中。 - #10988 (opens new window) 改进日志安全性,确保在数据桥接创建失败时敏感数据始终被模糊化。
- #10926 (opens new window) 允许在监听器的状态标志中使用
enable
和 “enabled
。 在此更改之前,可以通过在enabled
配置上设置true
或false
来启用/禁用监听器。与系统中其他状态标志的命名略有不同。现在,添加了enable
标志作为监听器的别名。 - #10970 (opens new window) 已向 Kafka 生产者桥接添加了一个 query_mode 参数。该参数允许您指定在向 Kafka 发送数据时桥接应该使用异步模式还是同步模式。默认为异步模式。
- #10676 (opens new window) 新增了用于导入/导出配置和用户数据的命令
emqx ctl export
和emqx ctl import
, 允许从正在运行的 EMQX 集群中导出配置和内置数据库数据,然后将其导入到相同或另一个正在运行的 EMQX 集群中。 - #11003 (opens new window) 在 Kafka 数据桥接中添加一个配置 TCP keepalive 的选项。
- #10961 (opens new window) 通过允许在配置和 HTTP API 中的
max_connections
字段中使用无限大(infinity)作为有效值,为网关监听器添加了对无限制最大连接数的支持。 - #11019 (opens new window) 改进了 JWT 的日志安全性,现在在打印之前将进行模糊化处理。
- #11024 (opens new window) 添加了一个小的改进,以减少在创建/更新 Pulsar 生产者桥接时看到
connecting
状态的机会。 - #11034 (opens new window) 隐藏 “broker” 配置, 并将
broker.shared_subscription_strategy
改为mqtt.shared_subscription_strategy
因为它属于 mqtt 的特性。 - #11045 (opens new window) 监听器认证和分区相关 api 在
5.1.0
版本中被正式移除。 - #11062 (opens new window) 将
log.file.to
更名为log.file.path
。
修复
#11018 (opens new window) 修复了 Stomp 网关的多个问题,包括:
- 修复了关于 is_superuser 无法正常工作的问题。
- 修复了 mountpoint 在消息发送中没有被移除的问题。
- 消息或订阅请求失败后,Stomp 客户端应该在回复错误信息后立即断开。
#11051 (opens new window) 增加了对证书
层级
(监听器 SSL 选项)须为非负整数的验证。#10563 (opens new window) 修复了订阅时 no_local flag 无法正常工作的问题。
#10653 (opens new window) 将网关认证的 TLS 证书和密钥保存到数据目录以修复内存泄漏问题。
#10682 (opens new window) 修正了在会话创建时为遗嘱消息赋予时间戳这个错误,现在该时间戳为会话断开时间。
#10701 (opens new window) Amazon Linux 2 的 EMQX RPM 软件包不支持 TLS v1.3,因为它是使用内置 openssl 1.0 的 Erlang/OTP 构建的。
#10677 (opens new window) 修复了规则 API 中的问题:当尝试删除不存在的规则时,会响应 404 HTTP 错误代码。
#10715 (opens new window) 支持在客户端连接钩子函数(client.connected hooks)中获取客户端证书。之前,为了减少内存消耗在建立连接后移除了该数据。
#10737 (opens new window) 修复了网关的 HTTP API 接口无法处理包含特殊字符的 ClientID 的问题,例如:
!@#$%^&*()_+{}:"<>?/
。#10809 (opens new window) 解决节点关闭或重启时出现的
** ERROR ** Mnesia post_commit hook failed: error:badarg
错误信息。Mria pull request: https://github.com/emqx/mria/pull/142 (opens new window)#10807 (opens new window) 在 debug 级别下,不再输出 license 检查相关的日志,该日志产生过于频繁,可能会干扰日志记录。
#10818 (opens new window) 修复了
emqx_ctl traces
命令错误,其中emqx_mgmt_cli
模块中的traces start
命令在某些过滤器下无法正常工作。#10600 (opens new window) 删除了 emqx_statsd 应用。
#10820 (opens new window) 修复了集群更新 license 后,新加入的节点不会应用新 license 而是继续使用旧 license 的问题。 有时新节点必须使用过时的 license。例如,在 license 过期后使用 emqx-operator 进行部署,并且需要扩展规模。此时,集群的 license 已经通过 API/CLI 更新,但新节点不会使用它。
#10851 (opens new window) 在错误的 API 日志中对敏感数据进行了混淆处理。
#10884 (opens new window) 修复了在节点加入集群时尝试获取规则信息或指标可能导致崩溃的问题。
#10887 (opens new window) 修复了一个潜在问题,即对桥接器的请求可能需要很长时间才能进行重试。 这只影响低吞吐量的情况,其中缓冲层可能需要很长时间才能检测到连接和驱动程序问题。
#10878 (opens new window) 已修复了 RabbitMQ 桥接程序中的一个漏洞,该漏洞可能会将密码暴露到日志文件中。
#10871 (opens new window) 修复了一个问题,即在 CoAP 连接断开后,Dashboard 仍显示连接存在,但删除和消息发布请求不生效。
#10880 (opens new window) 新增了一个 REST API
POST /clients/kickout/bulk
,用于批量踢出多个客户端。#10913 (opens new window) 修复了某个节点离开集群后,其插件状态 REST API 仍会包含集群节点状态问题。
#10923 (opens new window) 修复了通道信息注册中的竞态条件。 在此修复之前,当系统负载较重时,可能出现客户端已断开连接(或会话已过期),但仍可在 Dashboard 的客户端页面中找到的情况。其中一个可能的原因是期间发生的竞态条件:连接在通道数据注册过程中被中断。
#10930 (opens new window) 增加了对持续时间数据类型的 schema 验证,以避免使用无效值。 在此修复之前,可以在 schema 中使用不合理的值,超出系统限制,从而导致崩溃。
#10952 (opens new window) 如果设置了
verify = verify_none
,则禁止在监听器 SSL 选项中启用fail_if_no_peer_cert
。 设置fail_if_no_peer_cert = true
和verify = verify_none
会导致连接错误,因为选项不兼容。此修复在创建或更新监听器时验证选项,以避免这些错误。注意:应用此修复后,任何具有
fail_if_no_peer_cert = true
和verify = verify_none
的旧监听器配置将无法加载,并且必须手动修复。#10951 (opens new window) 修复了 MQTT-SN 网关中发布消息时挂载点未生效的问题。
#10943 (opens new window) 弃用了集群发现的 UDP 组播机制。 该功能自5.0版本以来一直计划弃用,主要是因为实际生产中缺乏使用。尽管该功能的代码在5.1版本中尚未移除,但文档接口已经被降级处理。
#10902 (opens new window) 避免从运行较新版本的节点同步
cluster.hocon
文件。 在集群滚动升级期间,如果旧版本节点由于任何原因需要重新启动,如果它从较新版本的节点复制cluster.hocon
文件,可能会导致启动失败。在此修复后,旧版本节点将不会从较新版本的节点复制cluster.hocon
文件,而是使用自己的cluster.hocon
文件进行启动。#10967 (opens new window) 修复了重平衡 API 中错误消息的格式问题:之前它们可能以不清晰的 Erlang 内部结构转储的形式显示。 在节点疏散的 CLI 和 API 中添加了
wait_health_check
选项。这是一个时间间隔,节点在此期间报告为”不健康状态”,但不会开始实际的疏散操作。我们需要这个选项来允许负载均衡器(如果有)将已疏散的节点从负载均衡中移除,并且不将(重新)连接的客户端转发到已疏散的节点。#10911 (opens new window) 修改了当尝试创建一个名称超过255个字节的桥接时出现的错误消息和日志条目的内容,使其更易于理解。
#10983 (opens new window) 修复了一个问题,即当 MQTT 客户端尝试通过配置为仅使用 TLS v1.3 的监听器进行连接时,无法建立TLS连接。 问题在于 TLS 连接尝试使用与 TLS v1.3 不兼容的选项。
#10977 (opens new window) 修复了订阅计数指标更新延迟以及 Stomp 网关中的配置问题。
#10950 (opens new window) 修复了在 MQTT-SN 网关中使
enable_qos
选项无效的问题。#10999 (opens new window) 更改了 Kafka 字段 “Partition Count Refresh Interval” 和 “Offset Commit Interval” 的 schema 验证,以避免接受超过最大允许值的值。
#10997 (opens new window) ClickHouse 桥接存在一个问题,即当 ClickHouse 服务器在发送消息时关闭时,即使请求的 ttl(time to live)设置为无限大,也可能导致消息丢失。通过将由于连接关闭引起的错误视为可恢复错误修复了该问题。
#10994 (opens new window) 在 HTTP 连接器中,对
proxy-authorization headers
进行了屏蔽处理,以防止将机密信息泄露到日志文件中。#10996 (opens new window) 对于任何未知的 HTTP/API 请求,默认返回404错误,而不是返回 Dashboard 的 index.html 页面。
#11005 (opens new window) 修复了在 AuthN HTTP 的跟踪日志中无法正确打印方法字段的问题。
#11006 (opens new window) 修复了 QUIC 监听器的默认证书文件路径。 在此更改之前,默认的证书文件路径以环境变量
${EMQX_ETC_DIR}
为前缀,但在 QUIC 监听器中使用之前未进行插值处理。#10998 (opens new window) 不允许为 MongoDB 桥接资源设置
batch_size
选项。当前的 MongoDB 连接器不支持批量处理,如果提供了batch_size
配置值,它将被强制设置为1。#10955 (opens new window) 修复了 MQTT-SN 网关中对预定义主题的配置删除无效的问题。
#11025 (opens new window) 修复了Pulsar Producer 桥接中可能在竞态条件下引发的
case_clause
错误。#11030 (opens new window) 改进了在使用 Listeners HTTP API 时发生验证错误所产生的错误信息。
#11033 (opens new window) 在 ExProto 网关中,弃用了
AuthenticateRequest
中的mountpoint
字段。 该字段在 e4.x 版本中引入,但实际上,在 e5.0 版本中,我们已经提供了gateway.exproto.mountpoint
进行配置,因此无需通过 Authenticate 请求来覆盖它。此外,将
subscriptions_max
、inflight_max
和mqueue_max
的默认值更新为无限大。#11040 (opens new window) 修复了 Kafka 生产者桥接的健康检查问题,当与 Kafka 代理的连接断开时该问题可能会导致消息丢失。
#11038 (opens new window) 修复了 Pulsar 生产者的健康检查问题,当与 Pulsar 代理的连接断开时该问题可能会导致消息丢失。
#11042 (opens new window) 修复了当监听器的 max_connections 配置设为字符串时 REST API
GET /listeners
崩溃的问题。#11028 (opens new window) 禁止在监听器配置中同时使用包括 tlsv1.3 但排除 tlsv1.2 的多个 TLS 版本。 使用具有这种版本差异的 TLS 配置会导致连接错误。此外,删除和记录与所选 TLS 版本不兼容的 TLS 选项。
注意:应用此修复后,任何包含上述版本差异的旧监听器配置将无法加载,必须手动修复。
#11031 (opens new window) 修复了创建桥接和检查 InfluxDB 桥接时的认证信息验证问题。
#11056 (opens new window) 修复了新创建的监听器有时无法正确启动的问题。当您删除一个名为 “default” 的系统默认监听器并添加一个新的同名监听器时,它将无法正确启动。
- 修复了某些节点上的配置失败可能导致 Dashboard 无法使用的错误。
#11070 (opens new window) 修复了
cluster.autoclean
配置项无法生效的问题。#11100 (opens new window) 修复了复制节点由于
mria_lb:core_nodes()
调用超时而无法连接到核心节点的问题。 相关的 mria pull request: https://github.com/emqx/mria/pull/143 (opens new window)#11092 (opens new window) 修复复制节点因超时无法连接到核心节点的问题。