物联网开发平台 规则引擎

这篇将介绍规则引擎的作用、数据处理链路、核心能力和典型场景,帮助你判断是否需要使用规则引擎,并选择合适的数据转发目标。

相关产品
物联网开发平台 产品页,含版本规格、价格与购买入口。

一、功能介绍

规则引擎用于处理进入物联网开发平台 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 及下游消费配置。
数据库写入失败。 检查实例状态、数据库及表配置、字段映射和访问权限。
转发失败后没有进入错误行为。 检查是否已经配置错误行为,以及主要转发行为是否已经完成重试。
下游收到重复消息。 规则转发存在重试机制,建议业务端使用消息唯一标识或业务主键实现幂等处理。
赞 (0)
上一篇 4天前
下一篇 4天前