本文将介绍规则引擎的作用、数据处理链路、核心能力和典型场景,帮助您判断是否需要使用规则引擎,并选择合适的数据转发目标。
功能介绍
规则引擎用于处理进入物联网开发平台 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时,才执行后续行为。常用条件包括:
类型 | 支持示例 |
比较 | =、<>、>、>=、<、<=。 |
逻辑 | AND、OR。 |
算术 | +、-、*、/、%。 |
组合条件 | 使用 ( ) 组合多个条件。 |
例如:
temperature > 30 AND humidity > 70 表示温度大于30且湿度大于70时才执行转发。当前控制台会根据数据来源、字段和条件自动生成对应 SQL,例如:
SELECT temperature, humidityFROM '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 及下游消费配置。 |
数据库写入失败。 | 检查实例状态、数据库及表配置、字段映射和访问权限。 |
转发失败后没有进入错误行为。 | 检查是否已经配置错误行为,以及主要转发行为是否已经完成重试。 |
下游收到重复消息。 | 规则转发存在重试机制,建议业务端使用消息唯一标识或业务主键实现幂等处理。 |