Pipeline 层
Pipeline是Event与Task之间的流程层。
Pipeline专注于用当前状态和上一个Task的结果决定下一步。
流程由PipelineHandler定义,运行时由PipelineInstance承载。每个Event最多对应一个PipelineInstance。
接口
Pipeline没有独立的PipelineInterface。它通过PipelineStep描述下一步要派发的Task:
ts
interface PipelineStep {
task: string
input: unknown
}| 字段 | 作用 |
|---|---|
task | 要执行的TaskHandler名称 |
input | 传给下一TaskInstance的输入 |
PipelineHandler.next()返回PipelineStep,具体规则见PipelineHandler。
实例
ts
class PipelineInstance {
readonly id: string
readonly event: EventInstance
readonly handler: PipelineHandler
readonly state: Record<string, any>
status: PipelineStatus
currentTaskId: string | null
getTask(): TaskInstance | null
signalTask(signal: TaskSignal): Promise<void>
consume(): unknown
}| 成员 | 作用 |
|---|---|
id | PipelineInstance的唯一ID |
event | 当前处理的EventInstance |
handler | 当前绑定的PipelineHandler |
state | 跨Task步骤共享的状态空间 |
status | 当前Pipeline状态 |
currentTaskId | 当前TaskInstance的ID |
getTask() | 获取当前TaskInstance;不存在时返回null |
signalTask() | 将信号发送给当前TaskInstance |
consume() | 取出终局结果并移除本PipelineInstance |
PipelineHandler.next()与onNormalSIG()的this绑定到PipelineInstance。Handler全局复用,流程中的可变数据应写入this.state。
WARNING
status与currentTaskId由NACEB维护,不应由Handler修改。
调度
PipelineFSMController负责校验PipelineHandler是否已注册、为Event创建并持有PipelineInstance、按Event查询实例,以及转发普通信号。
每一刻到来时,PipelineFSMController按以下顺序检查所有PipelineInstance:
- 处理
runningPipeline的已终局Task。 - Task为
done时消费其结果;若为$terminal,Pipeline进入done,否则将结果传给PipelineHandler.next()并派发下一步。 - Task为
stopped时,Pipeline进入paused。 - Task为
failure时消费错误结果,Pipeline进入failure。 - 对
pendingPipeline调用首次next(undefined),并派发第一个Task。
与Event层不同,Pipeline层每一刻可以推进多个PipelineInstance。
暂停、恢复和普通信号由PipelineInstance响应,不等待下一刻;具体调用由上层EventInstance发起。

