https://www.emqx.io/docs/zh/latest/data-integration/rules.html
【EMQ X 规则引擎技术设计分享-哔哩哔哩】 https://b23.tv/vazpuJy
【EMQX 企业版入门培训:规则引擎-哔哩哔哩】 https://b23.tv/Y5SjnNt
本视频将介绍 EMQX 重磅功能规则引擎的概念、工作原理、及应用场 景, 并以实际使用场景为例演示如何使用 EMQX 规则引擎。 EMQX 企业版是一款云原生分布式物联网接入平台, 具有一体化的分 布式 MQTT 消息服务和强大的 IoT 规则引擎,支持多种物联网标准协 议及行业私有协议。 更多详情请查看 EMQX 官网
https://www.emqx.com/zh/products/emqx
SQL 语句示例
基本语法举例
从 topic 为 "t/a" 的消息中提取所有字段:
sql
SELECT * FROM "t/a"
从 topic 为 "t/a" 或 "t/b" 的消息中提取所有字段:
sql
SELECT * FROM "t/a","t/b"
从 topic 能够匹配到 't/#' 的消息中提取所有字段。
sql
SELECT * FROM "t/#"
从 topic 能够匹配到 't/#' 的消息中提取 qos、username 和 clientid 字段:
sql
SELECT qos, username, clientid FROM "t/#"
从任意 topic 的消息中提取 username 字段,并且筛选条件为 username = 'Steven':
sql
SELECT username FROM "#" WHERE username='Steven'
从任意 topic 的 JSON 消息体(payload) 中提取 x 字段,并创建别名 x 以便在 WHERE 子句中使用。WHERE 子句限定条件为 x = 1。下面这个 SQL 语句可以匹配到消息体 {"x": 1},但不能匹配到消息体 {"x": 2}:
sql
SELECT payload.x as x FROM "#" WHERE x = 1
类似于上面的 SQL 语句,但嵌套地提取消息体中的数据,下面的 SQL 语句可以匹配到 JSON 消息体 {"x": {"y": 1}}:
sql
SELECT payload FROM "#" WHERE payload.x.y = 1
在 clientid = 'c1' 连接成功时,提取其来源 IP 地址和端口号:
sql
SELECT peername as ip_port FROM "$events/client_connected" WHERE clientid = 'c1'
筛选所有订阅 't/#' 主题且订阅级别为 QoS 1 的 clientid:
sql
SELECT clientid FROM "$events/session_subscribed" WHERE topic = 't/#' and qos = 1
筛选所有订阅主题能匹配到 't/#' 且订阅级别为 QoS 1 的 clientid。注意与上例不同的是,这里用的是主题匹配操作符 '=~',所以会匹配订阅 't' 或 't/+/a' 的订阅事件:
sql
SELECT clientid FROM "$events/session_subscribed" WHERE topic =~ 't/#' and qos = 1
对于一个 MQTT 5.0 PUBLISH 消息,筛选出 Key 为 "foo" 的 User Property:
sql
SELECT pub_props.'User-Property'.foo as foo FROM "t/#"
发表评论