增强
#12085 EMQX 已升级,以利用 OTP 版本 26.1.2-2 的功能。注意:Docker 镜像仍然使用 OTP 25.3.2 构建。
#12189 增强了 EMQX JWT 认证中的权限列表声明格式,使其具有更高的灵活性。更新后的格式现在支持数组结构,更加符合基于文件的 ACL 规则。
例如:
[ { "permission": "allow", "action": "pub", "topic": "${username}/#", "qos": [0, 1], "retain": true }, { "permission": "allow", "action": "sub", "topic": "eq ${username}/#", "qos": [0, 1] }, { "permission": "deny", "action": "all", "topics": ["#"] } ]
在这种新格式中,找不到匹配的规则不会自动导致操作被拒绝。如果在 JWT 权限列表中找不到匹配项,授权链可以将请求交由下一授权检查器继续检查。如果在整个链中都找不到匹配项,最终检查结果将根据
authorization.no_match
中设置的默认权限决定。#12267 为
cluster/:node/invite
接口增加了一个新的timeout
参数,解决了默认超时问题。之前设置的 5 秒默认超时,往往会导致 HTTP API 调用超时,因为 EMQX 加入集群通常需要更多时间。此外,EMQX 还添加了一个新的 API
/cluster/:node/invite_async
,支持以异步方式邀请节点加入集群,并通过新增的cluster/invitation
API 检查加入状态。#12272 对 EMQX 中的
retain
API 进行了更新:- 增加了一个新的 API
DELETE /retainer/messages
,用于清除所有保留的消息。 - 在
GET /retainer/messages
API 的查询字符串中增加了一个可选的主题过滤器参数topic
。例如,使用topic=t/1
可以过滤特定主题的保留消息,提高消息检索的效率。
- 增加了一个新的 API
#12277 新增了
mqtt/delayed/messages/:topic
API,用于按主题名称删除延迟消息。#12278 将 REST API 中支持分页的 API 的最大分页大小从
3000
调整到10000
。#12289 授权缓存支持排除特定的主题列表。对于指定的主题和主题过滤器列表,EMQX 将不会生成授权缓存。列表可以通过
authorization.cache.excludes
配置项或在 Dashboard 上设置。对于这些特定的主题权限检查将会始终实时进行,而不是依赖于之前的缓存结果,从而确保了授权结果的及时性。#12329 新增了
broker.routing.batch_sync
配置项。这个配置启用了一个专门的进程池,能够批量地将订阅信息与全局路由表同步,从而减少了可能由于网络延迟导致的跨节点通信的减慢。通过集中处理多个订阅更新,它不仅加速了集群中副本节点和核心节点之间的同步,而且还减轻了代理池的负载,从而最大限度地减少了过载的风险。#12333 为动作和连接器添加了一个
tags
字段。与description
字段(即自由文本注释)类似,tags
可用于为动作和连接器添加注释,便于过滤和分组。#12072 GreptimeDB 数据集成支持异步操作,以提供更好的性能。
#12194 提高了 Kafka 生产者数据集成的性能,降低了所连接的 Kafka 服务器 CPU 占用。
#12247 将 InfluxDB 的桥接分离出来,使其可以通过连接器和动作 APIs 使用。它们仍然与旧的桥接 API 兼容。
#12299 公开了更多 EMQX 指标信息以提高可观测性:
监控 API:
- 在
/api/v5/monitor_current
中添加了retained_msg_count
字段。 - 在
/api/v5/monitor_current
中添加了license_quota
字段。 - 在
/api/v5/monitor_current/nodes/{node}
中添加了retained_msg_count
和node_uptime
字段。 - 在
/api/v5/monitor_current/nodes/{node}
中添加了retained_msg_count
、license_quota
和node_uptime
字段。
Prometheus API:
- 在
/api/v5/prometheus/stats
中添加了emqx_cert_expiry_at
和emqx_license_expiry_at
,用于显示 TLS 监听器证书的过期时间和许可证的过期时间。 - 添加了
/api/v5/prometheus/auth
端点,提供所有认证器和授权器的执行次数和运行状态等指标。 - 添加了
/api/v5/prometheus/data_integration
端点,提供所有规则、动作和连接器的执行次数和状态等指标。
限制:
Prometheus push gateway 仅支持
/api/v5/prometheus/stats?mode=node
中的内容。有关更多 API 详情和指标类型信息,请参阅 swagger api 文档。
- 在
#12196 在路由清理过程中提高了网络效率。之前,当一个节点宕机时,所有其他存活节点之间必须交换针对该节点的每个路由的删除操作。在这次更改之后,所有存活节点之间只需交换一个
match and delete
(匹配并删除)操作,这显著减少了所需的网络数据包数量并降低了集群间网络的负载。 这种优化对于地理分布式的 EMQX 部署尤为有用,在这些部署中网络延迟可能会非常高。#12354 支持并发创建和更新数据集成,大大提高了例如导入备份文件时的操作速度。
#12396 增强了
authentication/:id/import_users
接口中的用户导入功能:- 新增
?type=plain
参数,用于更方便地导入使用明文密码的用户,补充现有的仅支持密码哈希的功能。 - 增强了对
content-type: application/json
的支持,允许以 JSON 格式提交 HTTP Body。这扩展了当前仅支持multipart/form-data
用于 CSV 文件的功能。
- 新增
#11902 EMQX 消息桥接时支持 Nari Syskeeper 2000 单向隔离网闸穿透。
修复
- #12232 修复了节点被强制离开集群后集群提交日志表未被删除的问题。
- #12243 修复了一系列细微的竞争条件,这些条件可能导致全局路由状态不一致。
- #12269 改进了
/clients
接口的错误处理;现在在查询字符串验证失败时返回 400 状态和更详细的错误信息,而不是通用的 500。 - #12285 更新了 CoAP 网关,以支持短参数名,从而节省了数据报大小。例如,
clientid=bar
可以写成c=bar
。 - #12303 修复了保留消息索引的问题。以前,具有通配符订阅的客户端可能会收到与其订阅主题不匹配的无关保留消息。
- #12305 修正了将不完整的客户端/连接信息传递到
emqx_cm
的问题,这可能导致内部不一致,并影响内存使用和节点疏散等操作。 - #12306 修复了通过 HTTP API 更新连接器密码参数后,连接器的连接测试无法正常工作的问题。
- #12359 修复了配置有某些类型数据桥接的节点重启时可能出现的错误消息问题。此外,这些桥接在节点重启时有进入失败状态的风险,需要手动重启以恢复功能。
- #12404 修复了一个问题,即在消息流量较大的情况下重启数据集成可能导致数据集成指标的收集停止。
- #12282 改善了 MySQL 桥接创建失败时 HTTP API 的错误响应。同时解决了在 SQL 中包含未定义列的 MySQL Sink 无法删除的问题。
- #12291 修复了 EMQX 在处理涉及敏感参数的配置更新时的不一致性,这以前导致集群配置文件中出现了错误的
"******"
字符串。 - #12301 修复了 InfluxDB 中的行协议问题,其中数值字面量被存储为字符串类型。
- #12317 从 MongoDB Action 架构中移除了尚未支持的
resource_opts.batch_size
字段。