规则引擎

EMQ X Rule Engine (以下简称规则引擎) 用于配置 EMQ X 消息流与设备事件的处理、响应规则。规则引擎不仅提供了清晰、灵活的 “配置式” 的业务集成方案,简化了业务开发流程,提升用户易用性,降低业务系统与 EMQ X 的耦合度;也为 EMQ X 的私有功能定制提供了一个更优秀的基础架构。

image-20190506171815028

EMQ X 在 消息发布或事件触发 时将触发规则引擎,满足触发条件的规则将执行各自的 SQL 语句筛选并处理消息和事件的上下文信息。

TIP

适用版本: EMQ X v3.1.0+

兼容提示: EMQ X v4.0 对规则引擎 SQL 语法做出较大调整,v3.x 升级用户请参照 迁移指南 进行适配。

消息发布

规则引擎借助响应动作可将特定主题的消息处理结果存储到数据库,发送到 HTTP Server,转发到消息队列 Kafka 或 RabbitMQ,重新发布到新的主题甚至是另一个 Broker 集群中,每个规则可以配置多个响应动作。

选择发布到 t/# 主题的消息,并筛选出全部字段:

  1. SELECT * FROM "t/#"

选择发布到 t/a 主题的消息,并从 JSON 格式的消息内容中筛选出 “x” 字段:

  1. SELECT payload.x as x FROM "t/a"

事件触发

规则引擎使用 $events/ 开头的虚拟主题(事件主题)处理 EMQ X 内置事件,内置事件提供更精细的消息控制和客户端动作处理能力,可用在 QoS 1 QoS 2 的消息抵达记录、设备上下线记录等业务中。

选择客户端连接事件,筛选 Username 为 ‘emqx’ 的设备并获取连接信息:

  1. SELECT clientid, connected_at FROM "$events/client_connected" WHERE username = 'emqx'

规则引擎数据和 SQL 语句格式,事件主题 列表详细教程参见 SQL 手册