遍历
for
组件:v0.22.0+ 遍历组件。用于遍历数组、切片和结构体,也可用于重复执行指定节点或子规则链。
# 配置
字段 | 类型 | 说明 | 默认值 |
---|---|---|---|
range | string | 遍历的目标表达式,示例:${msg.items},支持组件配置变量 | 1..3 |
do | string | 指定处理遍历元素的节点或子规则链 | s3 |
mode | int | 遍历结果合并方式,0 - 忽略,1 - 追加,2 - 覆盖,3 - 异步执行 | 0 |
range
- 支持遍历数组、切片、结构体。例如:
msg.items
遍历msg.items,1..5
遍历[]int{1,2,3,4,5} - 如果为空,则遍历整个msg
- 支持通过以下变量访问消息属性:
${id}
- 消息ID${ts}
- 消息时间戳${data}
- 消息原始内容${msg}
- 消息体(如果消息的dataType是json类型,可通过${msg.XX}
访问字段)${metadata}
- 消息元数据${msgType}
- 消息类型${dataType}
- 数据类型
表达式示例:
${msg.items}
- 遍历msg.items数组1..3
- 遍历[1,2,3],do执行3次${metadata.items}
- 遍历metadata中的items字段
更多expr表达式语法参考:expr (opens new window) 更多变量使用方法参考:组件配置变量
do
- 节点ID:如"s1",item将从s1节点开始执行分支链,直到链执行完成后返回遍历起点
- 子规则链:格式为"chain:chainId",如"chain:rule01",item将从rule01子链开始执行,直到链执行完成后返回遍历起点
mode
- 0(忽略) - 不合并遍历结果,保持原始消息不变
- 1(追加) - 将每次遍历结果追加到数组中
- 2(覆盖) - 使用最后一次遍历结果覆盖原始消息
- 3(异步) - 异步执行每次遍历,不等待结果
提示
遍历过程中可通过以下metadata获取当前遍历信息:
_loopIndex
- 当前遍历的索引_loopItem
- 当前遍历的元素值_loopKey
- 当前遍历的键名(仅遍历结构体时有值)
注意:如果遍历对象是[]interface{}类型,item值会通过msg.Data传递给处理节点
# Relation Type
- Success: 遍历执行成功,消息发送到
Success
链路 - Failure: 遍历执行失败(如表达式错误),消息发送到
Failure
链路
# 执行结果
- 根据mode配置决定最终输出的消息内容
- msg.metadata会在每次遍历过程中被更新
# 配置示例
{
"id": "s1",
"type": "for",
"name": "Iteration",
"configuration": {
"range": "${msg.items}",
"do": "s3"
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/09/02, 11:02:23