1、规则链基础:ThingsBoard规则链概述、核心概念与引擎工作原理

1.1 规则链概述

ThingsBoard 规则链(Rule Chain)是平台的核心数据处理引擎,负责对设备上报的遥测数据、属性更新、生命周期事件及 RPC 请求进行路由、过滤、转换与持久化。规则链采用可视化编排方式,用户无需编写后端代码即可构建复杂的物联网数据处理逻辑。

核心定位:规则链是 ThingsBoard 中“数据从哪里来、到哪里去、怎么处理”的唯一决策中枢。所有设备消息都必须经过至少一条规则链才能被存储或转发。

1.2 核心概念

概念 说明 类比
节点(Node) 规则链中的最小处理单元,每个节点执行单一职责:过滤、转换、增强、路由或外部集成。 工厂流水线上的单个工位
连接(Connection) 节点之间的有向边,定义消息流转路径。连接可附带标签(Label),用于区分成功/失败/自定义链路。 工位之间的传送带
消息(Message) 在节点间传递的数据载体,包含元数据(Metadata)和载荷(Payload)。 传送带上的工件
规则链(Rule Chain) 由节点和连接构成的有向无环图(DAG),定义完整的消息处理流程。 整条流水线布局图

1.3 消息结构详解

每条消息由三部分组成:

  • 元数据(Metadata):键值对集合,携带上下文信息(如设备名称、客户ID、消息来源规则链)。
  • 载荷(Payload):消息主体,支持 JSON、字符串、二进制三种格式。遥测数据通常为 JSON 对象。
  • 消息类型(Message Type):标识消息用途,常见类型包括 POST_TELEMETRY、POST_ATTRIBUTES、DEVICE_CONNECTED、RPC_REQUEST 等。
// 消息示例:温度传感器上报
{
  "metadata": {
    "deviceName": "temp-sensor-01",
    "deviceType": "temperature",
    "ts": "1712345678000"
  },
  "payload": {
    "temperature": 23.5,
    "humidity": 68.2
  },
  "msgType": "POST_TELEMETRY"
}

1.4 规则链引擎工作原理

ThingsBoard 规则链引擎基于事件驱动模型,采用单线程 + 队列架构确保消息有序处理。核心工作流程如下:

  1. 消息入链:设备或应用通过 MQTT/HTTP/CoAP 上报数据,平台将消息封装为标准格式并推入根规则链的起始节点。
  2. 节点执行:引擎按拓扑顺序遍历节点,每个节点执行其特定逻辑(如检查温度阈值、转换单位、调用外部 REST API)。
  3. 连接路由:节点执行完成后,根据返回结果(True/False/自定义标签)选择对应的连接,将消息传递给下一个节点。
  4. 终止条件:消息到达没有出边的节点(如“保存到数据库”节点)或触发错误处理逻辑时,该消息的生命周期结束。
关键特性:规则链引擎保证至少一次(At-Least-Once)消息处理语义。若节点执行失败,引擎会根据配置进行重试或路由到错误处理分支。
规则链消息流转核心流程 规则链消息流转核心流程 设备上报数据 消息封装与入链 规则链引擎(DAG遍历) 节点执行 → 连接路由 → 下一节点 持久化 / 转发 / 丢弃 消息类型决定起始节点 元数据携带上下文

1.5 节点类型与连接标签

规则链提供 6 大类节点,覆盖物联网数据处理的常见场景:

节点类别 典型节点 用途
过滤器(Filter) 消息类型过滤器、设备类型过滤器、脚本过滤器 根据条件决定消息是否继续流转
转换器(Transformer) 脚本转换节点、KV 转换节点、单位转换节点 修改消息的 payload 或 metadata
动作(Action) 保存到数据库、发送邮件、创建告警 执行持久化或外部通知
外部集成(External) REST API 调用、Kafka 生产者、MQTT 发布 与第三方系统交互
路由(Routing) 检查关系、检查属性、延迟节点 控制消息流向与时机
脚本(Script) JavaScript 脚本节点 自定义复杂逻辑

连接标签(Connection Label)是调试规则链的关键线索。每个节点输出端可定义多个标签,常见标签约定:

  • True / Success:节点执行成功且条件满足
  • False / Failure:节点执行成功但条件不满足
  • Error:节点执行抛出异常
  • Custom:用户自定义标签(如 high_temp、low_battery)
调试陷阱:连接标签名称必须与节点输出端定义的标签完全一致(区分大小写)。常见故障是标签拼写错误导致消息“丢失”——实际上消息被路由到了未连接的标签分支。
节点与连接标签关系 节点与连接标签关系 消息输入节点 脚本过滤器 检查温度 > 50 True False Error 创建告警 保存到数据库 错误处理节点 每个输出标签必须对应一条连接 未连接的标签分支会导致消息静默丢弃

1.6 规则链引擎的队列与并发模型

ThingsBoard 使用 Akka actor 模型实现规则链引擎的并发处理。每个规则链实例对应一个 actor,消息通过 FIFO 队列进入 actor 的邮箱。关键参数:

参数 默认值 说明
rule_engine.queue.max_pending_requests 10000 队列最大积压消息数,超过后新消息被拒绝
rule_engine.queue.ack_strategy AFTER_PROCESSING 确认策略:处理完成后才从队列移除
rule_engine.retry.max_attempts 3 节点执行失败时的最大重试次数
性能建议:当设备数量超过 10,000 台时,建议将规则链拆分为根规则链 + 子规则链的层级结构,避免单条规则链成为性能瓶颈。子规则链通过“规则链节点”引用,实现逻辑隔离与并行处理。

1.7 本章小结

  • 规则链是 ThingsBoard 的数据处理核心,由节点、连接、消息三大要素构成。
  • 消息包含元数据、载荷、消息类型三部分,调试时需重点关注元数据中的上下文信息。
  • 引擎采用事件驱动 + DAG 遍历方式处理消息,保证至少一次语义。
  • 连接标签是消息路由的关键,标签名称必须精确匹配,否则消息会静默丢失。
  • 理解队列与并发模型有助于在设备规模增长时进行性能调优。