Templatization是指使用预定义template将值动态插入或替换到文本中的过程。 这些template充当变量的占位符,之后可用实际数据填充。
在rule engine上下文中,template用于在运行时从入站消息中提取数据。 这在rule node配置中尤其有用,templatization可将配置字段中的静态值替换为入站消息的实时值,实现动态配置。 从而更灵活、自动地处理数据,便于根据不同输入执行条件操作。
语法
Template以美元符号($)开头,后跟方括号及其中的key名称。
方括号([])用于message payload的key,花括号({})用于message metadata的key。
例如:
$[messageKey]- 从入站消息payload中提取messageKey的值。${metadataKey}- 从入站消息metadata中提取metadataKey的值。
上例中,messageKey和metadataKey表示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] |