产品定价 立即试用
社区版
文档 > 规则引擎 > 模板化
入门
指南 安装 架构 API 常见问题
目录

模板化

Templatization是指使用预定义template将值动态插入或替换到文本中的过程。 这些template充当变量的占位符,之后可用实际数据填充。

在rule engine上下文中,template用于在运行时从入站消息中提取数据。 这在rule node配置中尤其有用,templatization可将配置字段中的静态值替换为入站消息的实时值,实现动态配置。 从而更灵活、自动地处理数据,便于根据不同输入执行条件操作。

语法

Template以美元符号($)开头,后跟方括号及其中的key名称。 方括号([])用于message payload的key,花括号({})用于message metadata的key。 例如:

  • $[messageKey] - 从入站消息payload中提取messageKey的值。
  • ${metadataKey} - 从入站消息metadata中提取metadataKey的值。

上例中,messageKeymetadataKey表示message payload或message metadata中可能存在的任意key名称。

示例

看一个示例。第一个JSON是message payload,第二个是message metadata:

1
2
3
4
5
6
7
{
  "temperature": 26.5,
  "humidity": 75.2,
  "soilMoisture": 28.9,
  "windSpeed": 26.2,
  "location": "riverside"
}
1
2
3
4
5
{
  "deviceType": "weather_sensor",
  "deviceName": "weather1",
  "ts": "1685379440000"
}

假设检测到异常高风速,要将该遥测读数发送到某外部REST API。 每次读数需关联特定device和location,这些信息仅在运行时可用。 我们可使用template提取必要数据并构建发送数据的URL:

example-base-url.com/report-reading?location=$[location]&deviceName=${deviceName}

该template将解析为:

example-base-url.com/report-reading?location=riverside&deviceName=weather1

Template适用于配置时未知具体值、但运行时会有值的场景。

注意事项

  • Template可与普通文本混合使用。例如:”Fuel tanks are filled to $[fuelLevel]%”。
  • 可使用点号访问JSON对象的嵌套key:$[object.key]
  • 若指定key不存在,或关联值为object或array,template字符串将原样返回。
  • 有两个特殊template,可将整个message payload或message metadata序列化为JSON字符串:
    • $[*] – 该template被替换为完整message payload的JSON字符串。例如,若template为”Raw data received: $[*]“且入站message payload为{"mode": "eco", "targetTemp": 21, "active": true},则结果为”Raw data received: {“mode”:”eco”,”targetTemp”:21,”active”:true}”。
    • ${*} – 类似地,该template被替换为完整message metadata的JSON字符串。例如,若template为”Enriching data with context: ${*}“且metadata为{"vehicleId": "TRUCK-042", "region": "EU-Central", "customer": "LogisticsCorp"},则结果为”Enriching data with context: {“vehicleId”:”TRUCK-042”,”region”:”EU-Central”,”customer”:”LogisticsCorp”}”。

为说明不同数据类型下的行为,看一个示例。以下是消息payload:

1
2
3
4
5
6
7
8
9
10
{
    "number": 123.45,
    "string": "text",
    "boolean": true,
    "array": [1, 2, 3],
    "object": {
        "property": "propertyValue"
    },
    "null": null
}

以下为template与提取值的对照表:

Template Extracted value
$[number] 123.45
$[string] text
$[boolean] true
$[array] $[array]
$[object] $[object]
$[object.property] propertyValue
$[null] null
$[doesNotExist] $[doesNotExist]