Webinar

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

enterprise 4.4.11 更新日志

本次版本更新包含了 23 个增强和 21 个修复。 在这些增强中,下面几个新功能值重点介绍:

  • 规则引擎的数据桥接新增 Google PubSub 的集成。
  • 新增 OCSP (Online Certificate Status Protocol) Stapling。
  • 新增 CRL (Certificate Revocation List) cache。
  • 规则引擎的 Pulsar 数据桥接支持缓存。
  • OTP 从 24.1.5-3 升级到了 24.3.4.2-1。
  • 新增了 客户端别名的支持,使得客制化认证和授权更加容易实现。

该版本仍支持从老版本的 e4.4 热升级上来, 但需要注意的是:如果需要在热升级后使用新版本提供的功能(例如 OCSP Stapling 和 CRL) 那么节点重启(配合配置更新)仍然不能避免。

增强

  • 升级了 Pulsar 客户端到 0.7.0。 升级后,Pulsar 可以配置支持消息缓存,当 Pulsar 服务器暂时下线时 ,EMQX 可以把消息缓存一段(可以配置)时间,等恢复之后继续发送。

    同时也修复了 Pulsar 客户端连接发生异常后的日志,连接参数中的密码和 JWT 等敏感 信息会在日志中进行隐藏。

    注意: 如果 EMQX 从原先的版本升级上来,然后再降级回去,可能会导致一些向 Pulsar 发送消息的飞行窗口中的同步请求超时,导致影响这部分客户端异常下线。

  • 为 GCP PubSub 添加了新的规则引擎桥和相应的规则操作 #1523

  • 增加了对 OCSP Stapling 和 CRL 检查/缓存的热配置支持 #1528

  • 支持在规则引擎的 MongoDB 动作的 Collection 字段里使用 ${var} 格式的占位符 #1503

  • 添加针对规则引擎中的 InfluxDB 资源的 host 字段的格式检查;主机字段应该是不包括 scheme 和端口的 IP/域名 #1426。 相关的文档更新请查看 emqx/emqx-docs#1368

  • OTP 升级: 从 24.1.5-3 至 24.3.4.2-1 #9265。 重要更新:

    • Erlang/OTP SSL库漏洞修复
    • 增加了对 OCSP (Online Certificate Status Protocol) Stapling 的支持
    • 增加了 CRL(证书吊销列表)缓存的自动刷新功能
  • 增加了 OCSP stapling 和 CRL 缓存 #9297

  • 增加了可定制的 clientid 或 username 别名的回调模块 #9297。 有了这个回调模块后,可以简单实现一个 Erlang 的回调函数用来给客户端增加别名,然后在认证和授权规则的占位符中使用这些别名 (%cida 用作 clientid 别名,%cna 用作 用户名别名)。

  • 增加了可定制的认证回调模块 #9297。 对于一些简单的认证检查,不需要去实现一个完整的认证插件。

  • 为规则引擎增加了一个 JWT 令牌管理,用于在规则引擎动作中创建和刷新 JWT 令牌 #9241。 该功能现在仅用于 EMQX 企业版的 Google PubSub 集成中。 后续会用于 webhook 集成的 JWT 认证。

  • 检查监听器的 tls_versions 配置值是 tlsv1tlsv1.1tlsv1.2tlsv1.3 中的一个或多个组合 #9260

  • 删除 Dashboard 监听器失败时日志中的无用信息 #9260.

  • 当 CoAP 网关给设备投递消息并收到设备发来的确认之后,回调 'message.acked' 钩子 #9264。 有了这个改动,CoAP 网关可以配合 EMQX (企业版)的离线消息缓存功能,让 CoAP 设备重新上线之后,从数据库读取其离线状态下错过的消息。

  • 支持在规则引擎的 Webhook 动作的 HTTP Headers 里使用 ${var} 格式的占位符 #9239

  • 在 emqx 启动时,异步地刷新资源和规则 #9199。 这个改动是为了避免因为一些资源连接建立过慢,而导致启动时间过长。

  • 订阅时,如果 ACL 检查不通过,打印一个警告日志 #9124。 该行为的改变主要是为了跟发布失败时的行为保持一致。

  • 基于 JWT 的 ACL 支持 all 动作,指定同时适用于 pubsub 两个动作的规则列表 #9044

  • 增强包含敏感数据的日志的安全性 #9189。 如果日志中包含敏感关键词,例如 password,那么关联的数据回被模糊化处理,替换成 ******

  • 增强 ACL 模块中的日志安全性,敏感数据将被模糊化 #9242

  • 增加 management.bootstrap_apps_file 配置,可以让 EMQX 初始化数据库时,从该文件批量导入一些 APP / Secret #9273

  • 增加了固化认证和 ACL 模块调用顺序的配置 #9283。 这两个新的全局配置名称为 auth_orderacl_order。 当有多个认证或 ACL 插件(或模块)开启时,没有该配置的话,模块调用的顺序取决于它们的启动顺序。 例如,如果一个插件(或模块)在系统启动之后单独重启了,那么它就有可能排到其他插件(或模块)的后面去。 有了这个配置之后,用户可以使用用逗号分隔的插件(或模块)的名字(或别名)来固化他们被调用的顺序。 例如,acl_order = jwt,http,可以用于保证 jwt 这个模块总是排在 http 的前面, 也就是说,在对客户端进行 ACL 检查时,如果 JWT 不存在(或者没有定义 ACL),那么回退到使用 HTTP。

  • 为更多类型的 client.disconnected 事件(计数器触发)提供可配置项 #9267。 此前,client.disconnected 事件及计数器仅会在客户端正常断开连接或客户端被系统管理员踢出时触发, 但不会在旧 session 被新连接废弃时 (clean_session = true) ,或旧 session 被新连接接管时 (clean_session = false) 被触发。 可将 broker.client_disconnect_discardedbroker.client_disconnect_takeovered 选项设置为 on 来启用此场景下的客户端断连事件。

  • 规则引擎资源创建失败后,第一次重试前增加一个延迟 #9313。 在此之前,重试的延迟发生在重试失败之后。

修复

  • 解决从 e4.4.5 以及更早的版本升级 emqx 的时候,Kafka 资源的认证类型从 PLAIN 变成了 NONE 的错误 #1509

  • 修复 JWT 认证插件的一个热升级问题 #1558。 当从 e4.4.3 或更早的热升级上来时,EMQX 内部一个 Key 管理进程会需要重启,在重启过程中的 JWT 认证请求可能会失败。

  • 修正了在 Kafka Consumer 中选择 reset_by_subscriber 偏移重置策略的选项 #1463

  • 修复了热配置中的 tls_versions 配置项遗漏了 tlsv1.3 选项的问题 #1532

  • 修复了 SQL Server 资源中,无法在 server 字段里使用除 1433 之外的端口的问题 #1464

  • Schema-Registry 的 API 在 HTTP 请求 URI 中支持百分号编码的 name #1497。 注意在创建 Schema 时,POST /api/v4/schemas 请求中的 name 字段不应使用百分号编码,因为这是一个 JSON 字段。

  • 修复 JWT 认证插件的一个热升级问题 #1554。 当从 e4.3.9 或更早的热升级上来时,EMQX 内部一个 Key 管理进程会需要重启,在重启过程中的 JWT 认证请求可能会失败。

  • 修复日志追踪模块没开启时,GET Trace 列表接口报错的问题。#9156

  • 修复创建追踪日志时偶尔会报end_at time has already passed错误,导致创建失败。#9156

  • 修复若上传的备份文件名中包含非 ASCII 字符,GET /data/export HTTP 接口返回 500 错误 #9224

  • 改进规则的 "最大执行速度" 的计数,只保留小数点之后 2 位 #9185。 避免在 dashboard 上展示类似这样的浮点数:0.30000000000000004

  • 修复在尝试连接 MongoDB 数据库过程中,如果认证失败会不停打印错误日志的问题 #9184

  • 修复 emqx-sn 插件在“空闲”状态下收到消息发布请求时可能崩溃的情况 #9024

  • 限速 “Pause due to rate limit” 的日志级别从原先的 warning 降级到 notice #9134

  • 保留老的 emqx_auth_jwt 模块的接口函数,保障热升级之前添加的回调函数在热升级之后也不会失效 #9144

  • 修正了 /status API 的响应状态代码 #9210。 在修复之前,它总是返回 200,即使 EMQX 应用程序没有运行。 现在它在这种情况下返回 503

  • 修复规则引擎的消息事件编码失败 #9226。 带消息的规则引擎事件,例如 $events/message_delivered$events/message_dropped, 如果消息事件是共享订阅产生的,在编码(到 JSON 格式)过程中会失败。 影响到的版本:v4.3.21, v4.4.10, e4.3.16e4.4.10

  • 使规则引擎 API 在 HTTP 请求路径中支持百分号编码的 rule_idresource_id #9190。 注意在创建规则或资源时,HTTP body 中的 id 字段仍为字面值,而不是编码之后的值。 详情请参考 创建规则创建资源

  • 修复调用 'DELETE /alarms/deactivated' 只在单个节点上生效的问题,现在将会删除所有节点上的非活跃警告 #9280

  • 在进行消息重发布或桥接消息到其他 mqtt broker 时,检查 topic 合法性,确定其不带有主题通配符 #9291

  • 关闭管理端口(默认为8081)上对 HTTP API api/v4/emqx_prometheus 的认证,Prometheus 对时序数据抓取不在需要配置认证 #9294