规则引擎是一种能够根据输入数据按照预设规则进行决策或执行动作的软件系统。本文将向您介绍 EMQX MQTT Broker 的规则引擎功能,并阐述其在 MQTT 消息转换和数据集成方面的重要作用。同时,我们还将提供一份快速入门指南,通过实例帮助您快速上手 MQTT 规则引擎。
MQTT 是一种高效可靠的消息传输协议,特别适用于低带宽、高延迟网络(在物联网领域十分常见)。在 MQTT 的发布/订阅模型中,MQTT Broker 扮演着关键角色,负责接收发布者发送的消息并将其可靠高效地分发给订阅者,确保消息的顺利传递。
MQTT 规则引擎是一种可以针对 MQTT 消息制定和执行规则的组件。该规则引擎具备提取、过滤、加工和转换 MQTT 消息的能力,并且可以在满足特定条件时触发相应的动作。通过规则引擎的应用,可以减少人工干预,提高数据集成和应用开发的效率。
规则引擎在 MQTT Broker 中有着广泛的应用,可以实现任务自动化、系统监控、效率提升和安全保障。例如:
EMQX 是一个开源、高度可扩展的 MQTT Broker,内置了规则引擎组件。它让用户可以用低代码的方式快速构建数据处理的业务逻辑,从而降低了软件架构的复杂度。
我们选择在 Broker 内部嵌入规则引擎功能,而不是依赖 Broker 外部的独立的规则引擎,有两个原因:
这里我们将以 EMQX Enterprise 为例,以便使用企业版提供的各种数据集成动作和资源。
根据您的操作系统类型,在这里下载 EMQX Enterprise。
在下拉列表中选择最新版的 EMQX Enterprise 4.4:
EMQX Enterprise 的默认许可证支持最多 10 个 MQTT 连接,对于我们体验规则引擎的功能来说已经足够了。如果您需要更多的 MQTT 连接,请点击“下载”按钮下方的链接申请 15 天免费试用。
这里我们以 Ubuntu 20.04 为例,下载 EMQX Enterprise 4.4.17 安装包:
$ wget https://www.emqx.com/en/downloads/enterprise/4.4.17/emqx-ee-4.4.17-otp24.3.4.2-1-ubuntu20.04-amd64.zip
$ unzip emqx-ee-4.4.17-otp24.3.4.2-1-ubuntu20.04-amd64.zip
接下来,我们启动 EMQX Broker:
$ cd emqx
$ ./bin/emqx start
如果您不想安装 Linux 操作系统、下载和安装 EMQX,或者执行任何 Linux 命令的话,您可以使用 EMQX Cloud 来体验规则引擎功能。您只需在网页上进行一些简单的配置即可。
我们假设有个用户名为 “Steve” 的设备周期性地向 notify
主题发送 JSON 格式的消息。下面是该设备发送的一条示例消息:
{"city": "Stockholm", "value": 21}
我们希望从原始消息中提取 value
字段值,并用它构造一条带有 temperature
字段的新消息,然后根据原始消息中的 city
字段值,将新消息动态转发到相应的 MQTT 主题,比如,上述示例消息将被转发到主题 city/Stockholm
:
{"temperature": 21}
既然我们已经明确了需求,就让我们打开 EMQX Dashboard(http://localhost:18083
)来创建一个规则吧(仪表板的默认用户名/密码是 admin
/public
)。
为了实现上述需求,我们需要编写如下 SQL 语句:
SELECT
payload.city as city,
payload.value as val
FROM
"notify"
WHERE
username = 'Steve'
我们只关注主题为 notify
的消息,因此在 FROM
子句中指定了它。WHERE
子句用于筛选出 username
字段等于 Steve
的消息。
SELECT
语句将原始消息中 city
和 value
字段的值分别赋给了两个新变量:city
和 val
。这两个变量将在接下来创建动作时使用。
接下来,我们需要为规则绑定 Republish
动作,并设置动作的参数:
city/${city}
{"temperature": ${val}}
在前一节中,SELECT
语句将 payload.city
和 payload.value
的值分别赋给了两个新变量:city
和 val
。我们的 Republish
动作使用 ${city}
和 ${val}
占位符来引用这些变量,规则引擎会在执行时将变量的值替换到相应的位置。
规则和动作创建完毕后,我们可以向 Broker 发送满足条件的消息来检验规则是否生效。
我们将使用 MQTTX 这款 MQTT 客户端工具来进行测试。您可以从这里下载并安装它。
首先,我们建立一个 MQTT 连接,将用户名设为 “Steve”。
然后,我们订阅目标主题 city/Stockholm
,并向 notify
主题发送一条消息:
成功了!我们收到了由规则转发过来的消息:
MQTT 规则引擎是一种强大的工具,可以根据物联网应用中的特定条件或事件自动触发动作。通过本文的快速入门指南和示例,您可以轻松上手 EMQX 规则引擎,在物联网项目中充分发挥它的优势。
EMQX Enterprise 规则引擎提供了丰富的数据集成动作和资源,可以快速高效地完成大部分与数据处理相关的业务逻辑。我们强烈推荐您自己探索和体验。有关规则引擎 SQL 语法的详细文档,请参考 Rule SQL 文档。
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/getting-started-with-rule-engine-in-mqtt-broker