增强
TLS 监听器内存使用量优化 #9005。 新增了配置项
listener.ssl.$NAME.hibernate_after
(默认不开启),该配置生效后,TLS 连接进程在空闲一段时间后会进入休眠。 休眠可以较大程度减少内存占用,但是代价是 CPU 利用率会增加。 测试中使用 '5s' (即 5 秒空闲后休眠)可以减少 50% 的内存使用量。默认 TLS Socket 缓存大小设置为 4KB #9007 这样可以有效的避免某些环境中操作系统提供的默认缓存过大而导致 TLS 连接内存使用量大的问题。
关闭了 API
api/v4/emqx_prometheus
的认证。 8955 Prometheus 对时序数据抓取不在需要配置认证。更严格对 flapping 检测,因认证失败等原因连接失败也会进行计数。 #9045
当共享订阅的会话终结时候,把缓存的 QoS1 和 QoS2 的消息向订阅组的其他成员进行转发。#9094 在这个增强之前,可以通过设置配置项
broker.shared_dispatch_ack_enabled
为true
来防止在共享订阅的会话中缓存消息, 但是这种转发因为需要对每个消息进行应答,会增加额外的系统开销。修复延迟发布可能因为修改系统时间而导致的延迟等问题。 #8908
修复
修复了
load_modules
被新加入集群的节点重置的问题。 在之前的版本,如果load_modules
中的默认模块状态改变了,例如从控制台停用, 如果一个带默认配置的节点新加入集群,会导致其他节点同步默认节点的状态,导致原先停用的模块 又被开启。修复后,新节点会尝试从现有集群中最老的那个节点复制一份loaded_modules
文件 然后再加入集群。自动订阅数据源是外部数据库的情况下,例如 redis,在本次修复前,如果 QoS 不在有效值范围内, 订阅仍然会成功,例如订阅了 QoS = -1,但后续消息发布到这个客户端时,会发生错误。 本次修复尝试将合法范围之外的 QoS 值强制转换到 [0-2] 范围内。
修复订阅成功的计数问题。本次修复前,自动订阅数据源是 Redis 时,查询超时后订阅失败仍然被计数为成功。
修复规则引擎对 QoS 0 离线消息保存的计数问题。 QoS 0 的消息不会被保存到后端数据库中而是会被丢弃。 在此次修复前,消息虽然被丢弃了,但是保存成功的计数器仍然计数,已修复为失败计数。
规则引擎增加 SSL 连接 redis 时的 “是否校验服务器证书” 选项。
修复 Redis 资源探活逻辑。本次修复前,Redis 资源连接成功即被认为可用。 本次修复方法是尝试做一个 PING 查询来检查资源是否可用。
修复 Redis 集群资源不可用产生大量日志的问题。
修复 Redis 集群资源内部 ID 冲突的问题。该冲突可能导致正在使用的资源被删除。
所有的密码字段都使用敏感信息遮盖输入框。
修复 (合并自 v4.3.21)
修复 HTTP 客户端库启用 SSL 后 Socket 可能会进入 passive 状态。 #9145
隐藏 redis 客户端错误日志中的密码参数 #9071 也包含了如下一些改进:
修复一些其他可能导致密码泄漏的隐患 eredis:19.
修复了 eredis_cluster 中连接池冥冥冲突的问题 eredis_cluster#22 同时对这个库也进行了密码泄漏隐患对修复。
修复共享订阅消息转发逻辑 #9094.
QoS2 飞行窗口消息丢弃的日志过度打印问题
对于通配符订阅的消息,会话中缓存的消息重发时,因为使用了发布主题(而非通配符主题)来进行重发, 导致无法匹配到 共享订阅组内的其他成员。
修复共享订阅
sticky
策略下,客户端取消订阅后仍然可以收到消息的问题。#9119 这之前的版本中,仅处理了客户端会话终结,而没有处理取消订阅。修复共享订阅 'sticky' 策略在某些情况下退化成
random
策略的问题。 #9122 集群环境下,在之前的版本中, 共享订阅组成员的选择在最开始时会随机选取,最终会选中在本节点连接的客户端,并开始粘性转发。 如果所有的订阅客户端都不在本节点,那么粘性策略就会退化成随机。 这个修复后,粘性策略将应用于第一个随机选取的客户端,不论该客户端是不是在本节点。修复规则引擎的备选(fallback)动作的计数重制问题。 #9125