Core Concepts zh CN - FlightDan/dispatcher-sdk GitHub Wiki
核心概念
| 概念 | 职责 |
|---|---|
| Dispatcher / Task | 0.7 的托管接口,用于提交本地任务、等待结果,并在重启后取回持久化任务句柄。 |
| Handler | 应用提供的函数,接收 payload 和执行上下文。 |
| Kernel / Runtime | Kernel 是执行状态的最终记录;Runtime 运行已注册的处理器。 |
| 执行命令 | 描述一次执行,指定执行身份、处理器绑定、输入、超时和重试策略。 |
| Run / task | Run 组织一组应用工作;task 记录依赖关系和业务尝试。 |
| Host | 在宿主进程保持运行时,驱动任务执行和结果投递。 |
| Effect | 保存外部操作的意图和回执,供应用显式恢复。 |
| Recovery / generation | Recovery 只重新打开符合条件的失败或取消 Run;generation 用来区分恢复前后的工作。 |
| 通知 / 收件箱 | 通知把结果投递给应用;持久化收件箱负责接收通知并去重。 |
| 观测 / 预算 | 观测报告已保存的执行事实;预算记录约束工作的时限。 |
启动 Dispatcher 后,调用 Dispatcher.submit() 会创建 Run 和 task、唤醒后台 Host,
并返回持久化的 Task 句柄。可用 app.start() 或 with 语句启动 Dispatcher。
应用可以等待结果,也可以消费已保存的结果通知。
用法见托管任务。
需要任务依赖、等待条件、显式恢复或控制 Run 决策时,再使用底层流程:创建 Run,记录 任务和派发意图,投递命令,执行任务并同步结果。应用校验结果后,显式决定下一步操作, 或者结束 Run。
submit_task() 只保存任务意图,不会运行处理器。手动循环需要使用 flush()、
runtime.run_once() 和 sync();OrchestratorHost 会驱动后台循环。仅创建
Orchestrator 不会启动调度器。
执行成功、输出符合结构要求、业务验收通过,分别是三个独立判断。 任务派发前,依赖必须已经结束(结算),但结果是否可接受仍由应用判断。 成功不会自动派发后继任务或结束 Run。未释放的 wait 会阻止结束 Run, 但不会自动阻止任务派发。
请求重放、执行重试、业务返工和通知重投需要分别处理。 重放请求沿用原始身份和内容;如果要改变请求内容,就需要新的业务决策和身份。 结果不确定的外部操作,应先根据证据核对,再决定是否重试。
Effect 恢复和 Run 恢复处理的问题不同。Effect 恢复用于核定一次结果不确定的外部操作。 Run 恢复保留原有身份和历史,再以新的 generation 重新打开符合条件的失败或取消的 Run。 事件、尝试、结果和通知都会记录产生它们的 generation,因此迟到的第 0 代数据不会 与恢复后的新工作混在一起。
Task.observe() 和 Task.events() 只读取已保存的执行事实,不会领取任务或修改时限。
Handler 通过 HandlerContext.activity 报告执行活动。观测的边界和可选停滞处理流程见
执行观测与监督。