版本发布

e5.1.0

增强

  • #11035版本发布记录 - 图1 (opens new window) 升级 Cassandra 驱动以避免用户名密码在数据桥接日志中泄漏。
  • #10584版本发布记录 - 图2 (opens new window) 为 SSL 通信增加日志等级配置。
  • #10678版本发布记录 - 图3 (opens new window) 优化计数器递增调用以避免在递增为0的情况下计数。
  • #10690版本发布记录 - 图4 (opens new window) 为 Webhook 桥接添加了重试机制,旨在尝试提高吞吐量。 这个优化让客户端可以在请求失败时进行重试,而不会阻塞缓冲层,从而在高消息传输率的情况下提高吞吐量。
  • #10702版本发布记录 - 图5 (opens new window) 引入了一个更直观的配置选项 keepalive_multiplier,并废弃了旧的 keepalive_backoff 配置。在改进之后,EMQX 通过将”客户端请求的 Keepalive 间隔”与 keepalive_multiplier 相乘来周期性地检查客户端的 Keepalive 超时状态。
  • #10698版本发布记录 - 图6 (opens new window) 优化了在运行时访问配置的内存使用。
  • #10778版本发布记录 - 图7 (opens new window) 重构 Pulsar 生产者桥接,避免在初始化阶段出现崩溃时资源泄漏。
  • #10813版本发布记录 - 图8 (opens new window) 重构了Kafka 生产者和消费者桥接,避免在初始化阶段出现崩溃时资源泄漏。
  • #10858版本发布记录 - 图9 (opens new window) 规则引擎 SQL 语言新增了一个实用函数 timezone_to_offset_seconds/1。该函数将时区字符串(例如”+02:00”、”Z”和”local”)转换为相应的偏移秒数。
  • #10841版本发布记录 - 图10 (opens new window) 为 Kafka 和 Pulsar 生产者桥接添加了参数校验,以确保在选择了 key_dispatch 策略时消息键参数不为空。
  • #10754版本发布记录 - 图11 (opens new window) 对 MQTT 桥接进行了增强,利用连接池和可用的并行性,大大提高了吞吐量。 因此,单个 MQTT 桥接现在使用一组 clientid 连接到远程代理。
  • #10782版本发布记录 - 图12 (opens new window) 在保留器(retainer)配置中添加了一个新的 deliver_rate 选项,它可以限制保留器中每个会话的最大传递速率。
  • #10877版本发布记录 - 图13 (opens new window) 升级 RocketMQ 驱动程序以增强处理敏感数据的安全性。
  • #10598版本发布记录 - 图14 (opens new window) 在 ExProto 中提供了一种 Unary 类型的回调方法,以避免可能的消息乱序问题。
  • #10895版本发布记录 - 图15 (opens new window) 重构了大部分桥接,避免在初始化阶段出现崩溃时资源泄漏。
  • #10790版本发布记录 - 图16 (opens new window) 通过优化配置读取机制减少读取配置的开销。
  • #10892版本发布记录 - 图17 (opens new window) 在创建 Oracle 数据库桥接时要求设置 SID 或服务名称。
  • #10910版本发布记录 - 图18 (opens new window) 数据桥接资源选项 auto_restart_interval 已被弃用,改为使用 health_check_interval,而 request_timeout 则被重命名为 request_ttl。此外,默认的 request_ttl 值从 15 秒增加到了 45 秒。 之前同时存在 auto_restart_intervalhealth_check_interval 会导致混淆,因为这两个参数都会影响数据桥接在故障下的恢复。这两个参数的配置不一致可能导致消息过期而无法重试。现在,health_check_interval 用于控制进行健康检查的间隔,健康检查会将数据桥接转换为 disconnectedconnecting 状态,也可以让数据桥接从 disconnected 状态中进行恢复。
  • #10929版本发布记录 - 图19 (opens new window) 升级 Erland/OTP 到 25.3.2-1。
  • #10909版本发布记录 - 图20 (opens new window) 移除了网关已弃用的 HTTP API。
  • #10908版本发布记录 - 图21 (opens new window) 重构了 RocketMQ 桥接,避免在初始化阶段出现崩溃时资源泄漏。
  • #10924版本发布记录 - 图22 (opens new window) 重构了 Influxdb 桥接,避免在初始化阶段出现崩溃时资源泄漏。
  • #10944版本发布记录 - 图23 (opens new window) 改进了 GCP PubSub 桥接,以避免在重启节点时可能出现消息发送失败的潜在问题。
  • #10933版本发布记录 - 图24 (opens new window) 支持在 MQTT/TCP 和 MQTT/SSL 监听器中配置 TCP keep-alive。
  • #10948版本发布记录 - 图25 (opens new window) 在一些 HTTP API 中添加了 live_connections 字段,例如:
    • /monitor_current,/monitor_current/nodes/{node}
    • /monitor/nodes/{node},/monitor
    • /node/{node},/nodes
  • #10941版本发布记录 - 图26 (opens new window) 设置 prometheus.vm_dist_collector=disabled 且度量指标 erlang_vm_statistics_run_queues_length_total 被重命名为erlang_vm_statistics_run_queues_length,提高 Prometheus 指标的收集速度。
  • #10985版本发布记录 - 图27 (opens new window)emqx ctl 命令的名称从 cluster_call 更名为 conf cluster_sync。旧命令 cluster_call 仍然是一个有效的命令,但不包含在帮助信息中。
  • #10988版本发布记录 - 图28 (opens new window) 改进日志安全性,确保在数据桥接创建失败时敏感数据始终被模糊化。
  • #10926版本发布记录 - 图29 (opens new window) 允许在监听器的状态标志中使用 enable 和 “enabled。 在此更改之前,可以通过在 enabled 配置上设置 truefalse 来启用/禁用监听器。与系统中其他状态标志的命名略有不同。现在,添加了 enable 标志作为监听器的别名。
  • #10970版本发布记录 - 图30 (opens new window) 已向 Kafka 生产者桥接添加了一个 query_mode 参数。该参数允许您指定在向 Kafka 发送数据时桥接应该使用异步模式还是同步模式。默认为异步模式。
  • #10676版本发布记录 - 图31 (opens new window) 新增了用于导入/导出配置和用户数据的命令 emqx ctl exportemqx ctl import, 允许从正在运行的 EMQX 集群中导出配置和内置数据库数据,然后将其导入到相同或另一个正在运行的 EMQX 集群中。
  • #11003版本发布记录 - 图32 (opens new window) 在 Kafka 数据桥接中添加一个配置 TCP keepalive 的选项。
  • #10961版本发布记录 - 图33 (opens new window) 通过允许在配置和 HTTP API 中的 max_connections 字段中使用无限大(infinity)作为有效值,为网关监听器添加了对无限制最大连接数的支持。
  • #11019版本发布记录 - 图34 (opens new window) 改进了 JWT 的日志安全性,现在在打印之前将进行模糊化处理。
  • #11024版本发布记录 - 图35 (opens new window) 添加了一个小的改进,以减少在创建/更新 Pulsar 生产者桥接时看到connecting 状态的机会。
  • #11034版本发布记录 - 图36 (opens new window) 隐藏 “broker” 配置, 并将 broker.shared_subscription_strategy 改为 mqtt.shared_subscription_strategy 因为它属于 mqtt 的特性。
  • #11045版本发布记录 - 图37 (opens new window) 监听器认证和分区相关 api 在 5.1.0版本中被正式移除。
  • #11062版本发布记录 - 图38 (opens new window)log.file.to 更名为 log.file.path

修复

  • #11018版本发布记录 - 图39 (opens new window) 修复了 Stomp 网关的多个问题,包括:

    • 修复了关于 is_superuser 无法正常工作的问题。
    • 修复了 mountpoint 在消息发送中没有被移除的问题。
    • 消息或订阅请求失败后,Stomp 客户端应该在回复错误信息后立即断开。
  • #11051版本发布记录 - 图40 (opens new window) 增加了对证书层级(监听器 SSL 选项)须为非负整数的验证。

  • #10563版本发布记录 - 图41 (opens new window) 修复了订阅时 no_local flag 无法正常工作的问题。

  • #10653版本发布记录 - 图42 (opens new window) 将网关认证的 TLS 证书和密钥保存到数据目录以修复内存泄漏问题。

  • #10682版本发布记录 - 图43 (opens new window) 修正了在会话创建时为遗嘱消息赋予时间戳这个错误,现在该时间戳为会话断开时间。

  • #10701版本发布记录 - 图44 (opens new window) Amazon Linux 2 的 EMQX RPM 软件包不支持 TLS v1.3,因为它是使用内置 openssl 1.0 的 Erlang/OTP 构建的。

  • #10677版本发布记录 - 图45 (opens new window) 修复了规则 API 中的问题:当尝试删除不存在的规则时,会响应 404 HTTP 错误代码。

  • #10715版本发布记录 - 图46 (opens new window) 支持在客户端连接钩子函数(client.connected hooks)中获取客户端证书。之前,为了减少内存消耗在建立连接后移除了该数据。

  • #10737版本发布记录 - 图47 (opens new window) 修复了网关的 HTTP API 接口无法处理包含特殊字符的 ClientID 的问题,例如:!@#$%^&*()_+{}:"<>?/

  • #10809版本发布记录 - 图48 (opens new window) 解决节点关闭或重启时出现的 ** ERROR ** Mnesia post_commit hook failed: error:badarg 错误信息。Mria pull request: https://github.com/emqx/mria/pull/142版本发布记录 - 图49 (opens new window)

  • #10807版本发布记录 - 图50 (opens new window) 在 debug 级别下,不再输出 license 检查相关的日志,该日志产生过于频繁,可能会干扰日志记录。

  • #10818版本发布记录 - 图51 (opens new window) 修复了 emqx_ctl traces 命令错误,其中 emqx_mgmt_cli 模块中的 traces start命令在某些过滤器下无法正常工作。

  • #10600版本发布记录 - 图52 (opens new window) 删除了 emqx_statsd 应用。

  • #10820版本发布记录 - 图53 (opens new window) 修复了集群更新 license 后,新加入的节点不会应用新 license 而是继续使用旧 license 的问题。 有时新节点必须使用过时的 license。例如,在 license 过期后使用 emqx-operator 进行部署,并且需要扩展规模。此时,集群的 license 已经通过 API/CLI 更新,但新节点不会使用它。

  • #10851版本发布记录 - 图54 (opens new window) 在错误的 API 日志中对敏感数据进行了混淆处理。

  • #10884版本发布记录 - 图55 (opens new window) 修复了在节点加入集群时尝试获取规则信息或指标可能导致崩溃的问题。

  • #10887版本发布记录 - 图56 (opens new window) 修复了一个潜在问题,即对桥接器的请求可能需要很长时间才能进行重试。 这只影响低吞吐量的情况,其中缓冲层可能需要很长时间才能检测到连接和驱动程序问题。

  • #10878版本发布记录 - 图57 (opens new window) 已修复了 RabbitMQ 桥接程序中的一个漏洞,该漏洞可能会将密码暴露到日志文件中。

  • #10871版本发布记录 - 图58 (opens new window) 修复了一个问题,即在 CoAP 连接断开后,Dashboard 仍显示连接存在,但删除和消息发布请求不生效。

  • #10880版本发布记录 - 图59 (opens new window) 新增了一个 REST API POST /clients/kickout/bulk,用于批量踢出多个客户端。

  • #10913版本发布记录 - 图60 (opens new window) 修复了某个节点离开集群后,其插件状态 REST API 仍会包含集群节点状态问题。

  • #10923版本发布记录 - 图61 (opens new window) 修复了通道信息注册中的竞态条件。 在此修复之前,当系统负载较重时,可能出现客户端已断开连接(或会话已过期),但仍可在 Dashboard 的客户端页面中找到的情况。其中一个可能的原因是期间发生的竞态条件:连接在通道数据注册过程中被中断。

  • #10930版本发布记录 - 图62 (opens new window) 增加了对持续时间数据类型的 schema 验证,以避免使用无效值。 在此修复之前,可以在 schema 中使用不合理的值,超出系统限制,从而导致崩溃。

  • #10952版本发布记录 - 图63 (opens new window) 如果设置了verify = verify_none,则禁止在监听器 SSL 选项中启用 fail_if_no_peer_cert。 设置 fail_if_no_peer_cert = trueverify = verify_none 会导致连接错误,因为选项不兼容。此修复在创建或更新监听器时验证选项,以避免这些错误。

    注意:应用此修复后,任何具有 fail_if_no_peer_cert = trueverify = verify_none 的旧监听器配置将无法加载,并且必须手动修复。

  • #10951版本发布记录 - 图64 (opens new window) 修复了 MQTT-SN 网关中发布消息时挂载点未生效的问题。

  • #10943版本发布记录 - 图65 (opens new window) 弃用了集群发现的 UDP 组播机制。 该功能自5.0版本以来一直计划弃用,主要是因为实际生产中缺乏使用。尽管该功能的代码在5.1版本中尚未移除,但文档接口已经被降级处理。

  • #10902版本发布记录 - 图66 (opens new window) 避免从运行较新版本的节点同步 cluster.hocon 文件。 在集群滚动升级期间,如果旧版本节点由于任何原因需要重新启动,如果它从较新版本的节点复制 cluster.hocon 文件,可能会导致启动失败。在此修复后,旧版本节点将不会从较新版本的节点复制 cluster.hocon 文件,而是使用自己的 cluster.hocon 文件进行启动。

  • #10967版本发布记录 - 图67 (opens new window) 修复了重平衡 API 中错误消息的格式问题:之前它们可能以不清晰的 Erlang 内部结构转储的形式显示。 在节点疏散的 CLI 和 API 中添加了 wait_health_check 选项。这是一个时间间隔,节点在此期间报告为”不健康状态”,但不会开始实际的疏散操作。我们需要这个选项来允许负载均衡器(如果有)将已疏散的节点从负载均衡中移除,并且不将(重新)连接的客户端转发到已疏散的节点。

  • #10911版本发布记录 - 图68 (opens new window) 修改了当尝试创建一个名称超过255个字节的桥接时出现的错误消息和日志条目的内容,使其更易于理解。

  • #10983版本发布记录 - 图69 (opens new window) 修复了一个问题,即当 MQTT 客户端尝试通过配置为仅使用 TLS v1.3 的监听器进行连接时,无法建立TLS连接。 问题在于 TLS 连接尝试使用与 TLS v1.3 不兼容的选项。

  • #10977版本发布记录 - 图70 (opens new window) 修复了订阅计数指标更新延迟以及 Stomp 网关中的配置问题。

  • #10950版本发布记录 - 图71 (opens new window) 修复了在 MQTT-SN 网关中使 enable_qos 选项无效的问题。

  • #10999版本发布记录 - 图72 (opens new window) 更改了 Kafka 字段 “Partition Count Refresh Interval” 和 “Offset Commit Interval” 的 schema 验证,以避免接受超过最大允许值的值。

  • #10997版本发布记录 - 图73 (opens new window) ClickHouse 桥接存在一个问题,即当 ClickHouse 服务器在发送消息时关闭时,即使请求的 ttl(time to live)设置为无限大,也可能导致消息丢失。通过将由于连接关闭引起的错误视为可恢复错误修复了该问题。

  • #10994版本发布记录 - 图74 (opens new window) 在 HTTP 连接器中,对 proxy-authorization headers 进行了屏蔽处理,以防止将机密信息泄露到日志文件中。

  • #10996版本发布记录 - 图75 (opens new window) 对于任何未知的 HTTP/API 请求,默认返回404错误,而不是返回 Dashboard 的 index.html 页面。

  • #11005版本发布记录 - 图76 (opens new window) 修复了在 AuthN HTTP 的跟踪日志中无法正确打印方法字段的问题。

  • #11006版本发布记录 - 图77 (opens new window) 修复了 QUIC 监听器的默认证书文件路径。 在此更改之前,默认的证书文件路径以环境变量 ${EMQX_ETC_DIR} 为前缀,但在 QUIC 监听器中使用之前未进行插值处理。

  • #10998版本发布记录 - 图78 (opens new window) 不允许为 MongoDB 桥接资源设置 batch_size 选项。当前的 MongoDB 连接器不支持批量处理,如果提供了 batch_size 配置值,它将被强制设置为1。

  • #10955版本发布记录 - 图79 (opens new window) 修复了 MQTT-SN 网关中对预定义主题的配置删除无效的问题。

  • #11025版本发布记录 - 图80 (opens new window) 修复了Pulsar Producer 桥接中可能在竞态条件下引发的 case_clause 错误。

  • #11030版本发布记录 - 图81 (opens new window) 改进了在使用 Listeners HTTP API 时发生验证错误所产生的错误信息。

  • #11033版本发布记录 - 图82 (opens new window) 在 ExProto 网关中,弃用了 AuthenticateRequest 中的 mountpoint 字段。 该字段在 e4.x 版本中引入,但实际上,在 e5.0 版本中,我们已经提供了 gateway.exproto.mountpoint 进行配置,因此无需通过 Authenticate 请求来覆盖它。

    此外,将 subscriptions_maxinflight_maxmqueue_max 的默认值更新为无限大。

  • #11040版本发布记录 - 图83 (opens new window) 修复了 Kafka 生产者桥接的健康检查问题,当与 Kafka 代理的连接断开时该问题可能会导致消息丢失。

  • #11038版本发布记录 - 图84 (opens new window) 修复了 Pulsar 生产者的健康检查问题,当与 Pulsar 代理的连接断开时该问题可能会导致消息丢失。

  • #11042版本发布记录 - 图85 (opens new window) 修复了当监听器的 max_connections 配置设为字符串时 REST API GET /listeners 崩溃的问题。

  • #11028版本发布记录 - 图86 (opens new window) 禁止在监听器配置中同时使用包括 tlsv1.3 但排除 tlsv1.2 的多个 TLS 版本。 使用具有这种版本差异的 TLS 配置会导致连接错误。此外,删除和记录与所选 TLS 版本不兼容的 TLS 选项。

    注意:应用此修复后,任何包含上述版本差异的旧监听器配置将无法加载,必须手动修复。

  • #11031版本发布记录 - 图87 (opens new window) 修复了创建桥接和检查 InfluxDB 桥接时的认证信息验证问题。

  • #11056版本发布记录 - 图88 (opens new window) 修复了新创建的监听器有时无法正确启动的问题。当您删除一个名为 “default” 的系统默认监听器并添加一个新的同名监听器时,它将无法正确启动。

    • 修复了某些节点上的配置失败可能导致 Dashboard 无法使用的错误。
  • #11070版本发布记录 - 图89 (opens new window) 修复了 cluster.autoclean 配置项无法生效的问题。

  • #11100版本发布记录 - 图90 (opens new window) 修复了复制节点由于 mria_lb:core_nodes() 调用超时而无法连接到核心节点的问题。 相关的 mria pull request: https://github.com/emqx/mria/pull/143版本发布记录 - 图91 (opens new window)

  • #11092版本发布记录 - 图92 (opens new window) 修复复制节点因超时无法连接到核心节点的问题。

重大变更版本发布记录 - 图93 (opens new window)

已知问题版本发布记录 - 图94 (opens new window)