ExecGo 的调度器对失败/重试/跳过的语义是确定的。上层编排层需要理解并正确处理:
- 某个任务最终
failed后,下游依赖它的任务会被标记为skipped skipped会级联跳过所有下游孙节点(dependency 失败导致级联)retry只影响“该任务自己的执行重试次数”,不影响依赖图结构
1. 重试与超时(每次尝试)
task.retry表示失败后尝试的次数- 实际尝试次数 =
task.retry + 1(首次尝试也算一次执行) - 每次尝试都会创建独立的上下文;当
task.timeout > 0时,每次尝试受超时限制
上层编排层应把
retry/timeout当作“任务级策略”,而不是“工作流级策略”。
2. 下游为何会变成 skipped
当某个任务在所有重试后仍失败:
- 调度器把它标记为
failed - 然后把所有直接下游任务标记为
skipped skipped会继续级联到更深层下游
因此你在编排层做决策时,至少需要区分:
failed:该节点自身执行问题(最终失败)skipped:上游依赖失败导致的不执行(通常不需要重复“解释失败原因”)
3. 轮询时的状态判定建议
当你轮询到某个任务状态:
success:可以继续推进(但注意“参数产物”仍需你在编排层处理)failed:通常需要终止或切换工作流分支(按你的业务策略)skipped:说明失败来自上游依赖;你的逻辑应从上游失败定位,而非从被跳过节点本身
4. 结合 Task.result / Task.error 的处理方式
ExecGo 会把:
- 成功结果写入
Task.result(JSON raw 字段) - 失败原因写入
Task.error(字符串)
上层编排层通常会:
- 对成功任务:解析
result并用于后续 params 注入 - 对失败任务:记录
error以便可观测与告警