公共 API
这一页按使用场景整理 Flow 1.0 的公开 Rust 接口。完整签名、字段和 Rustdoc 以 docs.rs 为准。
功能开关
最小 Rust 主机可以关闭默认功能。
引擎构建
FlowEngine 可克隆,内部存储和运行时通过 Arc 共享。公开运行时、存储、队列和观察者 Trait 都要求 Send + Sync。
创建与驱动运行
start_with_id() 的重投只有在定义与输入完全一致时成功。定义名称、版本、运行时、入口、运行版本、补丁标记、允许信号或输入变化都会返回 RunConflict。
检查接口
大规模生产查询应依赖 SQL 索引投影,并在控制面增加分页。list_snapshots() 会读取很多历史,不适合无限增长的数据集热路径。
外部输入与控制
按令牌查询只覆盖活动 Hook。可靠重投要保存第一次解析得到的运行 ID 与 Hook ID。
FlowRuntime
WorkflowInvocation 提供运行 ID、工作流定义、初始输入和完整历史。context() 返回 WorkflowContext,集中提供投影查询与命令构造。
StepInvocation 提供运行 ID、步骤 ID、步骤名、输入和历史。外部副作用只放在 run_step()。
WorkflowContext 查询
类型化读取通过 Serde 反序列化,失败返回 FlowError,不会产生 panic。
WorkflowContext 命令
一个 run_workflow() 调用只返回一个 RuntimeCommand。
定义和策略类型
快照与终态
主要只读投影包括 WorkflowRunSnapshot、StepSnapshot、WaitSnapshot、HookSnapshot、SignalWaitSnapshot、ChildWorkflowSnapshot 和 ScheduledWakeup。
WorkflowRunStatus 表达当前生命周期,WorkflowTerminalOutcome 表达带字段的最终结果。公开枚举为 #[non_exhaustive],匹配时保留兜底分支。
存储
PostgreSQL 生产迁移入口是 migrate_postgres_flow(),服务进程使用验证构造器。
调度与任务
FlowWorker 适合嵌入式队列。生产宿主优先使用任务管理组件统一处理生命周期。
观察
FlowEventObserver 在事件提交后接收包络。内置实现包括 NoopFlowEventObserver、InMemoryFlowEventObserver、FanoutFlowEventObserver 和本地 JSONL Sink。
A3sFlowEvent 提供低基数的事件投影,safe_metric_labels() 只返回适合指标标签的字段。观察失败不能反向改变已经提交的工作流历史。
工作流图
错误处理
crate 统一返回 a3s_flow::Result<T>,错误类型是 FlowError。生产代码通常需要单独处理以下类别。
不要把所有错误无条件重试。非确定性、身份冲突和版本准入错误需要修复代码、路由或调用方身份。
