EMQX Enterprise 新功能 Rule Engine 介绍
EMQX Enterprise Rule Engine
Rule Engine (以下简称规则引擎) 用于配置 EMQX 消息流与设备事件的处理、响应规则。作为 2019 年度 EMQX 新增重量级功能,规则引擎不仅提供了清晰、灵活的"配置式"的业务集成方案,用于简化业务开发流程,提升用户易用性,降低业务系统与 EMQX 的耦合度;也为 EMQX 的私有功能定制提供了一个更优秀的基础架构,提升开发交付速度。
规则引擎开源版本提供了基础处理能力,已集成在 EMQX v3.1.0 中发布。功能更灵活完备、可用性定制性更强的规则引擎正在紧密开发测试,计划集成在下一 EMQX 商业版中发布。
规则引擎典型应用场景举例:
- 动作监听:智慧家庭智能门锁开发中,门锁会因为网络、电源故障、人为破坏等原因离线导致功能异常,使用规则引擎配置监听离线事件向应用服务推送该故障信息,可以在接入层实现第一时间的故障检测的能力;
- 数据筛选:车辆网的卡车车队管理,车辆传感器采集并上报了大量运行数据,应用平台仅关注车速大于 40 km/h 时的数据,此场景下可以使用规则引擎对消息进行条件过滤,向业务消息队列写入满足条件的数据;
- 消息路由:智能计费应用中,终端设备通过不同主题区分业务类型,可通过配置规则引擎将计费业务的消息接入计费消息队列并在消息抵达设备端后发送确认通知到业务系统,非计费信息接入其他消息队列,实现业务消息路由配置;
- 消息编解码:其他公共协议/私有 TCP 协议接入、工控行业等应用场景下,可以通过规则引擎的本地处理函数(可在 EMQX 上定制开发)做二进制/特殊格式消息体的编解码工作;亦可通过规则引擎的消息路由将相关消息流向外部计算资源如函数计算进行处理(可由用户自行开发处理逻辑),将消息转为业务易于处理的 JSON 格式,简化项目集成难度、提升应用快速开发交付能力。
Rule Engine 工作示意图
规则引擎通过嵌入在 EMQ 的消息转发过程中对数据进行过滤、转换和丰富,实现高效的数据处理。新的规则引擎涵盖了 EMQX 中多个插件的功能,将原先插件中独立的外部资源进行集中管理,实现资源复用,降低管理监控复杂度。同时,规则引擎将大部分原先只能在应用端进行的计算内置到 EMQX 中,通过计算、过滤、筛选高价值数据提高消息处理效率的同时,精简了业务架构、减少数据传递路径降低了消息处理时延。
规则引擎相关的功能包括:
- 消息规则:处理设备到 EMQX 的消息,实现条件计算筛选、消息结构调整,消息重新发布、持久化与桥接;
- 事件规则:处理设备通信生命周期中的各个事件信息,可方便实现设备状态记录如上下线通知,认证连接记录、消息状态记录如消息计费统计等功能;
- 资源管理:集中管理外部资源,实现资源复用,降低管理监控复杂度。
与 EMQX 其他功能一样,规则引擎同样提供了类似的 HTTP REST API 方便用户应用开发集成,EMQX Dashboard ( EMQX 管理控制台)中亦实现了规则引擎的可视化创建、编辑、管理功能。
消息规则
借助规则引擎中的消息规则,用户可以将设备到 EMQX 的消息路由或写入到各类数据库、消息队列、HTTP REST 网关等对象或资源中,或重新发送到设备以实现服务端计算功能。
规则引擎提供了基于 SQL 表达式的数据查询、处理功能,让您先筛选数据并转换消息为预置格式,再配置后续处理动作。
SQL 表达式范例如下:
-- 选择发往 "t/a" 主题的消息体中的 name 字段, 过滤条件为 name = 'EMQ'
select payload.name as name from "t/a" when name = 'EMQ'
-- 选择发往 "command/#" 主题的消息体
select payload from "command/#"
消息规则典型功能与应用场景如下:
- 按照消息的主题进行过滤,指定要处理的消息,处理后重新发布到新主题;
- 制定筛选条件,针对消息正文特定字段进行条件筛选,处理满足条件的数据;
- 将消息正文转换为预置结构再处理,削减内部通信与外部存储、计算开销;
- 使用消息摘要、编码转换、数学运算等多种预处理方式处理消息正文或消息正文中指定字段,在 Broker 中完成简单计算以降低操作延迟。
每条消息规则包含以下属性:
事件规则
借助规则引擎中的事件规则,用户可以处理设备通信生命周期中的各个事件信息,事件规则典型功能与应用场景如下:
- 设备各个事件动作 log:,如设备连接/断开连接、消息发布、消息传送/抵达/丢弃、设备订阅/取消订阅等事件,用于设备操作记录与行为分析;
- 设备上下线通知与记录:监听 client.connected 与 client.disconnected 两个事件可以实现设备上下线记录;
- 消息状态记录:监听 message 相关事件可以实现关键消息指令状态监测如下发成功/失败回调等。
附:规则引擎功能列表