节点引用
ref:引用指定规则链或者当前规则链节点,用于节点复用。v0.24.0+
# 配置
| 字段 | 类型 | 是否必填 | 说明 | 默认值 |
|---|---|---|---|---|
| targetId | string | 是 | 格式:[{chainId}]:{nodeId},如果是引入本规则链,则格式为:{nodeId} | 无 |
| tellChain v0.34.0+ | bool | 是 | true:执行以targetId为起点的整条子链,否则仅执行本节点 | false |
# Relation Type
- 执行成功则使用该节点的输出关系发送到下一个节点。
- 如果找不到节点,则把消息通过
Failure关系发送到下一个节点。
跨链引用(targetId 带 chainId)时,引擎会在进入目标链前把调用方信息写入消息 metadata:fromChainId(调用方规则链 ID)与 fromNodeId(调用方节点 ID),子链内可通过 ${metadata.fromChainId} 消费,详见子规则链的「跨链来源元数据」。
targetId 动态取值:targetId 支持 ${} 表达式,执行时求值,可用变量:${msg.xxx}(消息体字段)、${metadata.xxx}(元数据)、${global.xxx}(全局配置)、${vars.xxx}(链变量)。常见形态:跨链 ${metadata.targetChain}:node_x、链和节点都动态 ${metadata.chainId}:${metadata.nodeId}、本链动态节点 ${metadata.nodeId}。变量缺失则占位符为空,目标链或节点不存在时走 Failure。静态值行为不变;编辑器里可直接在输入框手填表达式,或点右侧按钮两步选择。
给被引用的节点设置稳定的 id
节点的 id 可以手动指定(DSL 的 metadata.nodes[].id、Go 代码构建 types.RuleNode{Id: "..."}、编辑器节点属性面板的「节点ID」输入框均可)。被 ref 引用的节点建议始终显式设置语义化 id(如 dataValidator)——不写 id 时引擎会按节点顺序自动补 node_0、node_1...,这类按位置生成的 id 在节点增删或排序后会漂移,不适合作为引用目标。
# 示例
{
"id": "node_5",
"type": "ref",
"name": "引用当前链节点",
"configuration": {
"targetId": "node_4"
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
{
"id": "node_2",
"type": "ref",
"name": "引用其它链节点",
"configuration": {
"targetId": "ynlLYSAgCy2J:node_2"
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/09/23, 15:22:55