帮你快速理解、总结文档立即下载

规则引擎

最近更新时间:2026-09-11 16:05:33
本文档已由 AI 辅助审校
我的收藏
本文将介绍规则引擎的作用、数据处理链路、核心能力和典型场景,帮助您判断是否需要使用规则引擎,并选择合适的数据转发目标。

功能介绍

规则引擎用于处理进入物联网开发平台 Topic 的消息。您可以通过规则 SQL 选择消息来源、提取所需字段并设置筛选条件,再将符合条件的数据转发至其他 Topic、腾讯云服务或用户业务系统。
规则引擎主要解决以下问题:
哪些设备消息需要进入业务系统。
哪些数据满足转发条件。
数据需要转发到哪个目标。
转发失败后如何进行补偿和排查。
规则引擎位于设备消息通信与业务系统之间,用于完成数据筛选、路由和转发,不负责设备连接、身份认证及 MQTT 消息上报。

数据处理流程

规则引擎按照以下流程处理进入平台的 Topic 消息:
设备消息 → 数据来源 → 数据筛选 → 转发行为 → 目标服务
当主要转发行为执行失败时,可以进入配置的错误行为进行异常处理。

环节
说明
数据来源
指定需要进入规则处理的设备及 Topic。
数据筛选
提取消息字段并设置筛选条件,系统生成对应规则 SQL。
转发行为
将符合条件的数据转发至指定 Topic、云服务或业务系统。
错误行为
主要转发行为多次执行失败后,对异常消息进行补偿处理。
当前控制台的数据筛选配置会根据选择的字段、Topic 和条件自动生成规则 SQL,无需用户直接拼写完整 SQL。

前提条件

创建规则前,请确认:
已创建产品和设备,且设备能够正常向物联网开发平台上报消息。
已明确需要处理的设备消息及源 Topic。
如果需要转发至腾讯云服务或用户业务系统,目标资源已提前创建且状态正常。
如果目标资源涉及访问权限、网络或鉴权配置,请提前完成对应配置。
说明:
规则引擎只处理已经进入物联网开发平台的消息,不负责设备连接、身份认证及 MQTT 消息上报。

使用限制

使用规则引擎时,需要注意以下限制:
项目
限制
规则数量
一个账号最多100条。
单条规则转发行为数量
最多10个。
非 JSON 数据
不支持字段筛选,只能使用 * 转发完整内容。
目标资源
目标服务实例需要处于正常可用状态。
消息去重
同一消息在特定异常或重试情况下可能被重复发送。
当前产品限制明确说明,为确保消息送达,同一条消息可能发生重复发送,因此对于数据库写入、业务接口等场景,建议下游系统根据业务需要实现幂等或去重逻辑。

使用注意事项

规则只处理与数据来源匹配的 Topic 消息。
SQL 中使用的字段必须与设备实际上报 Payload 保持一致。
非 JSON 数据无法进行字段和条件筛选,只能整体转发。
消息不满足筛选条件时,不会执行转发行为。
规则需要启用后才开始处理后续进入平台的消息。
转发至云服务或第三方系统前,应确保目标资源状态、网络和权限配置正常。
如果业务不能接受重复消息,应在下游系统实现幂等处理。
对消息可靠性要求较高的场景,可以配置错误行为作为异常转发出口。

接入步骤

步骤 1:创建规则并选择数据来源

新建规则后,首先配置需要进入规则处理的数据来源。
数据来源主要包括:
配置项
说明
设备
指定产品下全部设备或具体设备。
Topic 类型
指定规则需要处理的消息类型。
Topic
根据产品、设备和消息类型确定实际消息来源。
当前规则引擎支持从不同类型的 Topic 中选择数据来源,例如物模型属性上报、事件上报、行为上报、自定义上报、设备状态变化以及网关子设备拓扑关系消息等。
规则只会处理与数据来源匹配的消息。例如,将数据来源配置为某产品的物模型属性上报 Topic 后,其他 Topic 中的消息不会进入该规则处理流程。

步骤 2:配置数据筛选

选择数据来源后,可以通过字段条件设置需要提取和转发的数据,平台会根据配置自动生成对应的规则 SQL。

提取字段

对于 JSON 格式消息,可以指定需要提取的字段。
例如设备上报:
{
"temperature": 32,
"humidity": 60
}
仅需要转发温度和湿度时,可选择:temperature, humidity
如果需要转发完整消息,可以使用:*
对于嵌套 JSON,可以使用 . 访问对应字段。例如:
{
"device_status": {
"switch": "on"
}
}
可以使用:device_status.switch
需要注意:
非 JSON 格式的数据不能按字段提取,只能使用 * 转发完整消息。
当前不支持通过规则 SQL 处理 JSON 数组和子 SQL。

设置筛选条件

对于 JSON 格式消息,可以设置条件,仅让满足条件的数据执行后续转发。
例如:temperature > 30 表示只有当设备上报的 temperature 大于30时,才执行后续行为。
常用条件包括:
类型
支持示例
比较
=<>>>=<<=
逻辑
ANDOR
算术
+-*/%
组合条件
使用 ( ) 组合多个条件。
例如:temperature > 30 AND humidity > 70 表示温度大于30且湿度大于70时才执行转发。
当前控制台会根据数据来源、字段和条件自动生成对应 SQL,例如:
SELECT temperature, humidity
FROM 'PRODUCT_ID/DEVICE_NAME/data'
WHERE temperature > 30
规则 SQL 可以理解为:
SQL 部分
作用
SELECT
指定需要提取的数据字段。
FROM
指定消息来源 Topic。
WHERE
指定消息筛选条件。

步骤 3:配置转发行为

数据满足规则条件后,规则引擎执行配置的转发行为,将处理后的消息发送至目标服务。
当前规则引擎支持以下主要转发目标:
目标类型
适用场景
另一 Topic
在物联网开发平台内部重新路由消息。
第三方服务
转发至 HTTP 或 HTTPS 服务。
CKafka
写入消息队列,供下游业务系统异步消费。
MySQL
将设备数据写入关系型数据库。
CTSDB
存储设备产生的时序数据。
TDSQL-MySQL
将数据写入分布式数据库。
云开发 CloudBase
将数据转发至云开发相关资源。
服务端规则结构当前同样可以看到 Topic 重发布、第三方服务、CKafka、MySQL 等行为类型。
选择转发目标后,根据目标类型配置对应资源。
例如:
转发至另一 Topic,需要指定目标 Topic。
转发至第三方服务,需要配置目标服务地址。
转发至 CKafka,需要选择实例及目标 Topic。
转发至数据库,需要选择实例并配置对应的数据字段映射。
说明:
规则引擎只负责将规则处理结果发送至目标资源。目标资源本身的创建、容量、权限及业务消费逻辑仍需在对应服务中完成。

步骤 4:配置错误行为(可选)

如果主要转发行为失败,可以配置错误行为,对未成功转发的数据进行补偿处理。
处理关系如下:
正常转发 → 成功 → 目标服务
正常转发 → 连续失败 → 错误行为
当主要行为操作执行失败时,平台会按照1s、3s、10s的间隔依次进行3次重试。若3次重试均失败,且已配置错误行为,则平台再执行1次错误行为转发;如果错误行为仍然失败,该消息将被丢弃。错误行为需要使用与主要行为不同的行为类型,可用于目标资源异常时提供备用处理路径。
错误行为应配置为与主要行为不同的转发类型。例如:
主要转发行为
错误行为示例
第三方 HTTPS 服务
CKafka
MySQL
另一 Topic
CKafka
第三方服务
说明:
是否配置错误行为可根据业务对消息可靠性的要求决定。

步骤 5:启用并验证规则

完成数据来源、数据筛选和转发行为配置后,启用规则。
建议按照以下方式验证:
1. 使用设备向规则配置的数据来源 Topic 上报一条消息。
2. 确认消息内容满足规则筛选条件。
3. 检查规则是否正常执行。
4. 前往目标资源确认是否收到对应数据。
5. 如果转发失败,根据规则执行结果和错误信息进行排查。
例如规则条件为:temperature > 30
分别上报:
{
"temperature": 25,
"humidity": 60
}
该消息不满足条件,不执行转发。
再上报:
{
"temperature": 32,
"humidity": 60
}
该消息满足条件,规则提取对应字段并执行配置的转发行为。

规则执行与问题定位

规则消息处理可以按照以下三个阶段进行排查:
现象
优先排查
规则未触发。
数据来源、Topic、规则是否启用。
规则触发但没有筛选结果。
Payload 格式、字段名称、字段路径、筛选条件。
数据筛选成功但转发失败。
目标资源状态、配置参数、网络及访问权限。
显示转发成功但业务侧未获取数据。
目标 Topic、队列、数据库或下游消费逻辑。
例如规则日志出现 Payload_Not_JSON,表示规则正在按照 JSON 数据进行处理,但收到的 Payload 不是合法 JSON;出现 Payload_No_Field,则通常表示实际 Payload 中不存在规则引用的字段。当前官方规则引擎文档提供了对应运行错误码用于定位这类问题。

常见问题

现象
排查建议
设备已经上报消息,但规则没有触发。
检查规则是否启用,以及设备、Topic 类型和实际消息 Topic 是否与数据来源匹配。
规则没有提取到需要的字段。
检查实际 Payload 是否为 JSON,以及字段名称和字段路径是否正确。
设置条件后规则不再转发。
检查设备实际上报值是否满足条件,并确认字段数据类型与表达式匹配。
非 JSON 消息无法设置筛选字段。
非 JSON 数据不支持字段筛选,请使用 * 转发完整 Payload。
规则执行成功但目标没有收到数据。
检查目标 Topic、消息队列、数据库等资源配置以及下游消费逻辑。
第三方 HTTP/HTTPS 服务转发失败。
检查服务地址、网络连通性及目标服务响应状态。
CKafka 没有收到消息。
先确认规则是否成功执行,再检查 CKafka 实例、Topic 及下游消费配置。
数据库写入失败。
检查实例状态、数据库及表配置、字段映射和访问权限。
转发失败后没有进入错误行为。
检查是否已经配置错误行为,以及主要转发行为是否已经完成重试。
下游收到重复消息。
规则转发存在重试机制,建议业务端使用消息唯一标识或业务主键实现幂等处理。