Webinar

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

enterprise 5.1.1 更新日志

增强

  • #10667 将 MongoDB 连接器和桥接重构为单独的应用程序,以改进代码结构。

  • #11115 添加了信息日志,标示由于存活时间(TTL)过期而丢弃的缓冲消息。

  • #11133retainer 的配置中将 deliver_rate 重命名为 delivery_rate,兼容之前的 deliver_rate

  • #11137 重构了 Dashboard 监听器配置,使用嵌套的 ssl_options 字段来进行 SSL 设置。

  • #11138 将k8s api_server的默认值从 http://127.0.0.1:9091 更改为 https://kubernetes.default.svc:443

    • discovery_strategy=static 时,emqx_ctl conf show cluster 不再显示不相关的配置项。 与etcd/k8s/dns 相关的配置信息将不再显示。
    • emqx_ctl conf show_keys 中删除了 zones(已弃用的配置键)。
  • #11165swagger.json 中删除了 /configs/limiter API 文档,API 仍然保留。

  • #11166 在规则引擎 SQL 中添加了 3 个随机函数:

    • random(): 生成 0 到 1 之间的随机数(0.0 =< X < 1.0)。
    • uuid_v4(): 生成随机 UUID(版本4)字符串。
    • uuid_v4_no_hyphen(): 生成无连字符的随机 UUID(版本4)字符串。
  • #11180 添加了一个新的配置 API /configs(GET/PUT),支持重新加载 HOCON 格式的配置文件。

  • #11226 统一监听器开关配置项为 enable,同时兼容之前的enabled

  • #11249 添加了支持通过 REST API 设置 License 连接使用配额的告警阈值。

  • #11251 添加了 GET /cluster/topology REST API,用来返回集群拓扑,显示 RLOG 核心节点和复制节点之间的连接。

  • #11253 将 Webhook/HTTP 桥接重构为单独的 Erlang 应用,为将来的使用提供了灵活性,并允许将桥接作为独立应用程序运行。

  • #11079 Kafka 桥接,生产者模式下为消息添加了自定义 headers 支持。

  • #11132 MQTT 授权检查添加了 QoS 级别和保留消息条件,现在 EMQX 可以验证客户端是否有权限使用指定的 QoS 级别进行发布/订阅,以及有权限发布保留消息。

  • #11207 更新了多个数据桥接的驱动版本,以增强安全性并确保敏感数据不会泄露。包括:

    • TDengine
    • MongoDB
    • MySQL
    • Clickhouse
  • #11241 将 Schema Registry 重构为单独的 Erlang 应用以提供灵活性。

  • #11020 升级了 emqtt 依赖项,以防止调试日志中的敏感数据泄漏。

  • #11135 改进了规则引擎中的时间偏移解析器,并返回统一的错误代码。

  • #11236 改进了默认参数下 GET /clients REST API 客户端查询的速度。

修复

  • #11004 主题重写不再允许在目标主题中使用通配符。

  • #11026 解决了规则引擎中 divmod 操作使用的一致性问题。之前,div 操作只能作为中缀操作使用,mod 只能通过函数调用使用用。现在,divmod 都可以通过函数调用语法和中缀语法使用。

  • #11037 启动 HTTP 连接器时,如果系统无法连接到远程目标系统,EMQX 现在会返回一个描述性错误。

  • #11039 修复了 Redis 连接器的数据库验证问题。之前,负数被接受为有效的数据库。

  • #11074 修复了有关 MQTT-5.0 [MQTT-3.8.3-4] 协议内容的问题。

  • #11077 修复了更新监听器时使用非整数的端口可能发生崩溃的问题。

  • #11094 修复了 Kafka 桥接生产者模式在重新连接时无法报告连接错误的问题。

  • #11103 更新了 erlcloud 依赖项。

  • #11106 添加了对桥接资源 worker_pool_size 的最大数量的验证。现在最大数量为 1024,以避免因不合理数量的工作进程导致大内存消耗。

  • #11118 确保 REST API 响应中的验证错误信息更加明确。现在,如果有超出范围的错误,将呈现为{"value": 42, "reason": {"expected": "1..10"}, ...},替换了先前使用的 expected_type,改为使用 expected

  • #11126 修复了规则下有异步模式的桥接时,规则的失败指标计数问题。

  • #11134 修复了日志中敏感字段大写 authorization header 的值不被混淆的问题。

  • #11139 将 Redis 桥接器重构为单独的 Erlang 应用,以改进代码结构。

  • #11145 在 Ekka 和 Mria 中进行了几处修复和改进。

    Ekka:

    • 改进了集群发现日志消息,以一致地描述实际事件 Ekka PR
    • 删除了弃用的集群自动清理配置参数(已移动到 Mria) Ekka PR

    Mria:

    • 现在 Ping 只在复制节点上运行。之前,mria_lb尝试同时 ping 停止和运行中的复制节点,可能导致超时错误。 Mria PR
    • 在复制 $mria_rlog_sync 表时使用 null_copies 存储。 此修复对 EMQX 目前没有影响,因为 $mria_rlog_sync仅在 mria:sync_transaction/2,3,4 中使用,而这在 EMQX 中未被使用。 Mria PR
  • #11148 修复当一个节点离开集群时,其他节点仍然尝试将配置更新操作同步到其中的问题。

  • #11150 在启动 emqx_psk 应用程序时等待 Mria 表,确保 PSK 数据在复制节点上同步,即使它们没有初始化的 PSK 文件。

  • #11151 将 MySQL 桥接重构为单独的 Erlang 应用,以改进代码结构。

  • #11158 在 Mnesia 后端的 retainer 启动时等待 Mria 表,避免加入集群时出现错误。

  • #11162 修复 Webhook 桥接异步模式下,4XX 和 5XX HTTP 状态码被统计为成功指标的问题。

  • #11164 重新引入对嵌套占位符(例如:${payload.a.b.c})的支持,对于 JSON 格式的 Payload,从规则动作与数据桥接中提取数据时无需先调用 json_decode(payload)

  • #11172 修复了特定情况下 payload 重复的问题:

    • 使用不带 as 子表达式的 foreach 语句,并选择所有字段,例如:

      FOREACH payload.sensors FROM "t/#"
      
    • 在选择 payload 字段和所有字段的情况下,例如:

      SELECT payload.sensors, * FROM "t/#"
      
  • #11174 修复了 MQTT 桥接 Ingress 的 server 字段的编码问题。在修复之前,它被编码为 ASCII 字符对应的整数列表。
  • #11184 配置项 mqtt.max_packet_size 最大值设置为协议定义 256MB。
  • #11192 修复了在使用 atom 类型生成有效 HOCON 文件时,从 HOCON 文件中删除不必要的 "
  • #11195 修复了 REST API 可以为 Stomp 网关指定客户端创建重复订阅的问题。
  • #11206 连接到 CoAP 网关时,不再要求客户端的 usernamepassword 参数必填。
  • #11208 修复了 LwM2M 客户端异常数据统计的问题。
  • #11211 DELETE 操作操作不存在的资源时,一致性地返回 404 状态码。
  • #11214 修复了节点配置可能在加入集群时无法正确同步的问题。
  • #11229 修复了在通过 emqx ctl conf load 更改配置后,插件无法启动/停止的问题。
  • #11237 /prometheus API中 headers 的默认值应为对象而不是列表。
  • #11250 修复了 WebSocket 数据包中包含多个 MQTT 数据包时其顺序被颠倒的问题。
  • #11271 确保 REST API 与配置中百分比类型的范围为 0% 到 100%。比如 sysom.os.sysmem_high_watermark=101% 现在是无效的设置。
  • #11272 修复了日志中的拼写错误,错误地将异常 PUBREL 数据包称为 pubrec
  • #11281 恢复对特殊的 $queue/ 共享订阅主题前缀的支持。
  • #11294 修复了emqx_ctl cluster joinleavestatus命令。
  • #11306 修复了规则动作指标不一致的问题,未计算丢弃的请求。
  • #11309 改进了 EMQX 应用程序的启动顺序。简化了构建脚本,并改进了代码重用。
  • #11322 支持从 EMQX 备份文件(emqx ctl import命令)中导入了其他配置:
    • rule_engine(以前由于错误未导入)
    • topic_metrics(以前未实现)
    • slow_subs(以前未实现)。
  • #10645 更改了对 Oracle、PostgreSQL、MySQL 和 Kafka 生产者数据桥接的健康检查,以确保目标表/主题存在。
  • #11107 现在在测试 MongoDB 桥接时返回健康检查失败原因。
  • #11139 将 Redis 桥接重构为单独的 Erlang 应用,以改进代码结构和易维护性。
  • #11151 将 MySQL 桥接重构为单独的 Erlang 应用,以改进代码结构和易维护性。
  • #11163 隐藏 MondoDB 桥接中的 topology.pool_size,并将其固定为 1 以避免混淆。
  • #11175 现在,REST API 创建 MySQL 连接时如果使用不存在的主机名,将返回 400 错误而不是 503 错误。
  • #11198 修复了复制节点上全局再平衡状态评估策略。之前,/api/v5/load_rebalance/global_status API method 可能在由复制节点处理时返回不完整的结果。
  • #11223 InfluxDB 桥接写入配置中,某个字段混用小数和整数时可能会导致 Influx Line Protocol 序列化失败,并且无法写入 InfluxDB 桥接(当小数位为 0 时小数点会被忽略,InfluxDB 误以为其是整数)。 另请参阅:InfluxDB v2.7 Line-Protocol
  • #11225 修复了PostgreSQL/Timescale/MatrixDB 桥接没有验证 username 可能为空的问题。
  • #11242 当节点加入集群时重新启动 emqx_ee_schema_registry。因为 emqx_ee_schema_registry 使用 Mria 表,所以节点加入集群需要重新启动此应用程序,以启动相关的 Mria 分片进程,确保在核心/复制节点模式下正确工作。
  • #11266 修复和改进对 TDengine insert语法的支持:
    1. 支持在模板中插入多表。 例如: insert into table_1 values (${ts}, ${val}) into table_2 values (${ts}, ${val})
    2. 支持在模版中混合前缀/后缀和占位符。 例如: insert into table_${topic} values (${ts}, '${id}', '${topic}') 注意:这是一个破坏性变更。此前,字符类型的占位符会被自动转义加上单引号,而现在需要手动加上单引号。 例如: insert into table values (${ts}, '${a_string}')
  • #11307 在 Oracle 桥接中检查表是否存在时返回更友好的错误信息。
  • #11316 修复了在 Oracle 桥接中未考虑 Pool Size 值的问题。
  • #11326 修复了在 Oracle 桥接中返回错误检查的问题。 ### 已知问题