控制
有五个节点负责驾驭场景的执行流程。
提醒一下:任何节点都还带有隐含端口 in、error 和 done ——
参见端口与连线。
Input / Param(输入 / 参数)
Section titled “Input / Param(输入 / 参数)”声明场景的参数。
| 输入 | 无 |
| 输出 | value —— 一个单一对象 { name: value, … } |
| 配置 | name(参数名)、valueType(它的类型和默认值) |
这些值在启动时提供,可以用命令行的 --param name=value 传入,
也可以在执行到该节点却没有可用值时交互式地询问。
输入“baseUrl”(字符串) ──► 请求的 env 端口Output / Return(输出 / 返回)
Section titled “Output / Return(输出 / 返回)”向场景的调用方暴露一个结果。
| 输入 | value |
| 输出 | 无 —— 这是一个终点:既没有 error,也没有 done |
| 配置 | name |
被运行场景动作调用的场景,会把它的每一个输出提供在调用方的 output:<name> 端口上。
If(条件判断)
Section titled “If(条件判断)”两路分支。
| 输入 | left、right |
| 输出 | then、else |
| 配置 | operator:lt、lte、eq、gte、gt、ne、contains —— 另外还有作为字面值的 left 和 right |
小技巧:如果两个操作数既没有接线也没有填写,该节点就只判断 in 上收到的信号是否为真。
这就是不带显式条件的“只要走到了这里”。
Switch(分支)
Section titled “Switch(分支)”N 路分支。
| 输入 | on |
| 输出 | 每个已声明的分支一个 case-<id> 端口,另加 default |
| 配置 | cases:一组 { id, value } |
只要出口多于两个,它就比一连串 If 更可取:每个分支都是一根独立的线,视觉上一目了然。
Retry(重试)
Section titled “Retry(重试)”出错后重来的边界。
| 输入 | maxAttempts、delay |
| 输出 | attempt(每一次尝试)、exhausted(尝试次数用尽) |
| 配置 | 见下文 |
| 字段 | 默认值 | 作用 |
|---|---|---|
maxAttempts | 3 | 最大尝试次数 |
backoff | fixed | fixed、linear 或 exponential |
delay + delayUnit | — | 基础延迟(ms、s、min) |
factor | 2 | 指数模式下的增长因子 |
maxDelay + maxDelayUnit | — | 延迟上限 |
retryOnError | true | 出错时重试 |
retryOnFailure | false | 业务失败时重试 |
retryOnStatus | — | 一组 HTTP 状态码,例如 [429, 503] |
接在 attempt 上的子图构成被重试的范围。成功时,出口是 done。
这个节点没有 error 端口:因为它本身就是边界。
Retry(3 次,指数退避,[429,503]) ├─ attempt ──► HTTP 请求 ──► Assert └─ exhausted ──► Throw“服务不可用”