EMQX Enterprise 5.7 发布:新增会话持久化、消息 Schema 验证、规则引擎调试与追踪功能

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 在这个新版本中,我们引入了一系列新的功能和改进,包括会话持久化、消息 Schema 验证、规则引擎调试与追踪测试等功能。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。

EMQX Enterprise 5.7.0 版本现已正式发布!

在这个版本中,我们引入了一系列新的功能和改进,包括会话持久化、消息 Schema 验证、规则引擎调试与追踪测试等功能。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。

会话持久化

EMQX 内置的会话持久化(Durable Session)功能提供了强大的持久性和高可用性。该功能允许将 MQTT 持久会话(Persistent Session)及其消息存储到磁盘上,并在 EMQX 集群的多个节点之间持续复制会话元数据和 MQTT 消息。

该功能具备灵活的配置参数,通过配置复制因子,用户可以自定义每条消息或会话的副本数量,从而在持久性和性能之间实现平衡。

EMQX Cluster

与内存存储相比,将 MQTT 消息存储在共享的、复制的持久存储中,可以降低在线和离线会话的内存使用量,支持更大规模的会话和消息处理。会话持久化功能还实现了有效的故障转移和恢复机制,确保服务的连续性和高可用性,从而提高系统的可靠性。

查看文档

消息 Schema 验证

EMQX 内置了 Schema 验证功能,用于验证 MQTT 消息的结构和格式,对于不符合格式的消息可以丢弃或断开其客户端连接,并打印日志和触发规则引擎事件以方便用户进行进一步的处理。

Schema 验证可使用 JSON Schema、Protobuf 和 Avro 等多种格式的模式,或使用内置的 SQL 语句验证来自指定主题的消息格式。通过据格式校验,可以及早发现并屏蔽这些不合规消息,保证系统稳定可靠。

消息 Schema 验证

除了验证外,同一份 Schema 还能用于 EMQX 规则引擎的 Schema 编解码和 Schema 检查功能,以及外部数据系统和业务流程中,帮助用户实现:

  • 数据完整性:验证 MQTT 消息的结构和格式,以确保数据的一致性和正确性。
  • 数据质量:强制执行数据质量,检查缺失或无效的字段、数据类型和格式,可以确保数据的质量和一致性。
  • 统一的数据模型:确保整个团队和项目中使用统一的数据模型,减少数据不一致和错误。
  • 重用和共享:允许团队成员重用和共享 Schema,可以提高团队成员之间的协作效率,减少重复工作和错误。

查看文档

规则支持调试与追踪

规则引擎现在提供了 DEBUG 与追踪功能,允许使用模拟数据或真实客户端触发规则,执行规则 SQL 以及规则中添加的所有动作,并获取每个步骤的执行结果。

下图是功能的截图,当规则 SQL 或任意动作执行失败时,可以在 Dashboard 页面上看到出错的记录,并快速定位到对应动作,查看结构化的错误信息以进行错误排查。

规则页面

从图中可以看到,规则被触发了 4 次,前 3 次规则执行完全成功,第 4 次由于 HTTP 服务动作执行失败。结合错误日志,能够看到错误原因是 HTTP 服务器响应了 302 状态码。

相较于此前的 SQL 测试,规则 DEBUG 与追踪功能能够验证整个规则是否按预期工作,快速排查并解决存在的问题。这不仅加快了开发速度,还确保了规则在实际运行时能够如期执行,避免在真实环境中出现故障。

查看文档

规则动作支持快速输入变量

在此前版本中,规则动作支持使用 ${var} 占位符语法来使用规则处理结果中的变量,以实现灵活的配置,例如,动态的构造 HTTP 请求、MySQL 的 INSERT 语句、AWS S3 对象键等。这一功能带来了极大的灵活性,但用户需要自主推导当前规则 SQL 中可用的变量,并完整手动输入。这增加了使用难度,且容易出错。

在本次发布中,Dashboard 的动作配置页面为支持使用占位符变量的输入框添加了动态输入提示。类似编辑器的代码提示功能,根据当前规则 SQL 自动推导出可用的变量,在用户输入过程中快速提示可用的值。这不仅方便用户精准进行功能配置,还显著减少了出错的可能性。

规则动作支持快速输入变量

日志追踪功能增强

在日志追踪中新增了以下两个特性:

  1. 支持指定规则 ID 跟踪规则执行结果:精准地跟踪和调试某一特定规则的执行过程,日志输出将包含规则 SQL 的执行结果,以及与规则中添加的所有动作的执行过程日志,以便快速定位和排查问题。
  2. 支持设置日志追踪输出格式为 JSON:更便于自动化日志处理和分析,提升数据处理效率。

查看文档

客户端属性

客户端属性是 EMQX 提供的一种机制,允许使用键值对的方式为每个客户端设置额外的属性。

属性值可以从 MQTT 客户端连接信息(如用户名、客户端 ID、TLS 证书)处理生成,也可以从认证成功返回的附带的数据中设置。例如:

添加配置,在客户端连接时以 : 分割客户端 ID 并将第一段作为 VIN 属性:

mqtt.client_attrs_init = [
  {
    expression = "nth(1, tokens(clientid, ':'))"
    set_as_attr = "VIN"
  }
]

属性可以用于 EMQX 的认证授权、数据集成和 MQTT 扩展功能等功能中。以 MySQL 授权检查为例,可以配置查询 SQL,根据客户端属性中的 VIN 查找客户端具有的发布订阅权限:

SELECT 
  permission, action, topic, qos, retain 
FROM mqtt_acl 
  WHERE VIN = ${client_attrs.VIN}

相较于直接使用客户端 ID 等静态属性,客户端属性能够更灵活的用在各类业务场景中,并简化开发流程,增强开发工作的适应性和效率。

查看文档

JWT 认证到期断开客户端连接

JWT 规范中带有过期时间属性,在签发 Token 时允许声明一个过期时间。在此之前,EMQX 的 JWT 认证中仅在客户端连接时检查这一属性,在连接成功后,即使在 JWT 过期客户端也能保持连接。

本次发布中,EMQX 在 JWT 认证中添加了令牌过期后断开 MQTT 连接的功能。默认情况下该功能是启用的,以避免潜在的安全隐患,从而提升系统的整体安全性。

如果要保留以前的行为,请关闭 JWT 认证器设置中过期后断开连接选项。

客户端认证

查看文档

插件开发支持热配置与自定义 UI

此前 EMQX 已经支持了插件,能够用来扩展实现自定义的功能。在一些插件中,可能需要用户填写相应的配置参数。

本次发布为插件添加了参数热配置功能,并允许用户通过 Avro Schema 来声明管理参数配置所需的 UI 页面,EMQX Dashboard 会在插件管理页面中自动加载。

开发者只需专注于后端业务逻辑的实现,UI 页面由系统自动生成,减少了开发工作量。对于用户,则可以直观地配置插件参数,提升用户体验。

这是插件中可选的功能,用户仍然可以使用纯后端进行开发。

查看文档

其他功能

  1. Apache IoTDB 数据集成支持 IoTDB v1.3.0 版本以及批量插入功能,提高了数据写入性能。
  2. 将错误格式导入内置身份验证数据库时,提供了更具体的错误信息,便于用户快速定位问题。
  3. RocketMQ 添加了对命名空间和密钥调度策略的支持,实现与阿里云上托管的 RocketMQ 集成。

BUG 修复

以下是主要 BUG 修复列表:

  • #12653 规则引擎的 bin2hexstr 函数现在支持位大小不能被 8 整除的参数,例如 subbits 函数的返回值。

  • #12657 修复规则引擎 SQL 不允许将任何表达式作为数组元素的问题,现在可以使用任何表达式作为数组元素,例如:

    SELECT
      [21 + 21, abs(-abs(-2)), [1 + 1], 4] as my_array
    FROM 
      "t/#"
    
  • #12765 确保统计数据 subscribers.count subscribers.max 包含共享订阅者,此前只包含非共享订阅者。

  • #12812 修复了连接器因健康检查阻塞,导致更新或删除连接器超时的问题。

  • #12996 修复保留消息 emqx_retainer 进程泄漏问题。此前客户端在接收保留消息时断开连接可能会导致进程泄漏。

  • #12871 修复疏散节点导致的节点启动问题。此前,如果节点疏散过程中关闭了 EMQX,则 EMQX 将无法重新启动。

  • #12888 修复导入备份数据后 License 相关的配置丢失问题。

  • #12895 添加了 DynamoDB 连接器和动作中一些必要但缺失的配置。

更多功能变更和 BUG 修复请查看 EMQX Enterprise 5.7.0 更新日志

相关实践学习
5分钟轻松打造应对流量洪峰的稳定商城交易系统
本实验通过SAE极速部署一个微服务电商商城,同时结合RocketMQ异步解耦、削峰填谷的能力,带大家体验面对流量洪峰仍旧稳定可靠的商城交易系统!
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
如何将DataGridView中的滚动条显示出来
1、选项设置   DataGridView有一个ScrollBars,可以设置水平滚动条,垂直滚动条,或者两种包含。   2、实际运行效果
5661 0
|
人工智能 Serverless 文件存储
“黏土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
使用阿里云函数计算FC,快速部署AI绘画工具ComfyUI,体验高质量图像生成。新用户可享180元试用额度,包括GPU、vCPU、内存和调用次数。开通FC和文件存储NAS,通过应用中心选择ComfyUI模板创建应用。
47701 8
“黏土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
|
3月前
|
负载均衡 安全 容灾
虚拟专线设备端配置指南 (无影 x iKuai)
本文档主要介绍AL88系列设备的环境准备、上网配置及插件配置。环境准备包括个人电脑、网线、设备及互联网连接;上网配置涵盖设备拆箱检查、通电接线、浏览器登录管理后台和内外网设置;插件配置则通过高级应用完成无影虚拟专线的绑定。
|
消息中间件 SQL 运维
AIOps 智能运维:比专家经验更优雅的错/慢调用分析工具
本文主要介绍ARMS 错/慢 Trace 分析功能基本原理; 该功能能够覆盖哪些异常 Trace 根因; 最后会介绍一些最佳实践案例。
50084 86
|
9月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
262 3
SpringBoot 整合jdbc和mybatis
|
11月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
140 1
|
11月前
|
存储 缓存 API
后端的技术方案怎么写?
本文讨论了编写方案的重要性,旨在帮助我们清晰理解需求并确保有效落地。方案应记录实现初衷,方便后续迭代,避免因缺乏文档导致的代码理解困难。通过方案评审,可以考虑通用性和复用性,减少重复工作。文章还强调了在新系统或已有系统上添加功能时需考虑的问题,如系统复杂度、耦合度、API依赖、兼容性、性能和数据处理。此外,方案应涵盖需求背景、系统架构设计(包括业务架构、状态机、存储、服务应用和服务治理)、上线计划和灰度发布策略。最后,文章提到了性能设计、复用性和中台建设的思考,指出设计应以满足实际需求和降低成本为目标。
325 0
|
JavaScript 前端开发
使用JavaScript实现一个复杂功能:日期范围选择器
使用JavaScript实现一个复杂功能:日期范围选择器
|
安全 数据安全/隐私保护
基于RBAC实现权限系统
基于RBAC实现权限系统
641 0
|
存储 数据可视化 前端开发
数仓常用分层与维度建模
本文介绍了数据仓库的分层结构和维度建模。数仓通常分为ODS、DIM、DWD、DWS和ADS五层,各层负责不同的数据处理阶段。维度建模是数据组织方法,包括星型和雪花模型。星型模型简单直观,查询性能高,适合简单查询;雪花模型则通过规范化减少冗余,提高数据一致性和结构复杂性,但可能影响查询效率。选择模型需根据业务需求和数据复杂性来定。
1294 0