Files
orbit/docs/examples/workflow.md

3.9 KiB
Raw Blame History

并行生成结果 → 等待外部回执 → 后续任务

完整源码通过独立Go SDK发布固定版本、启动实例,并使用真实自动Worker处理任务。流程是两个文本规范化任务并行完成并汇合,等待500毫秒,等待模拟外部确认信号,最后用左侧输出执行发布步骤。输入为 {"text":" hello orbit "},输出为 {"text":"HELLO ORBIT"}。

1. 启动

环境:Go 1.27.1、MySQL 8.4+,已设置专用ORBIT_MYSQL_DSN。仓库根目录执行:

go run ./cmd/orbit-migrate up
mkdir -p .local
chmod 700 .local
go run ./cmd/orbit-admin bootstrap \
  --application workflow-example --namespace default --environment development \
  --queue workflows --workflow-access --workflow-run-access \
  --workflow-signal-access --worker-access \
  --output .local/workflow.credentials.json
go run ./cmd/orbit

初始化仅执行一次,文件存在时不会覆盖。重用该凭据运行例子无需重复bootstrap。另开终端,从仓库根目录执行:

cd sdk/go
ORBIT_URL=http://127.0.0.1:8080 \
ORBIT_CREDENTIALS_FILE=../../.local/workflow.credentials.json \
go run ./examples/workflow

生产使用HTTPS/WSS,并为定义发布者、启动者、信号发送者及Worker分别签发所需权限。本示例使用一个专用开发凭据,未申请人工恢复或控制权限。

2. 调用链与输出

CreateWorkflowDefinition → PublishWorkflowVersion(v1) → StartWorkflow → 原键再次StartWorkflow → 自动Worker并行执行 → GetWorkflowStep读取当前信号契约与代次 → SendWorkflowSignal → 原键再次发送 → 后继任务完成 → GetWorkflow → GetWorkflowSteps和GetTaskSource核对三个任务的固定来源 → Worker有界排空。

预期输出中的ID每次运行不同:

workflow=<32位实例ID> state=SUCCEEDED result={"text":"HELLO ORBIT"} start_deduplicated=true signal_deduplicated=true
workflow_sources_verified=3 fixed_version=v1
workflow_history_verified=true signal_state=CONSUMED
worker_drained=true started=3 confirmed=3

示例会确认三个任务实际开始、三个结果确认且没有运行中的处理器。信号的target_activation_sequence读取自当前步骤,correlation_key使用等待原关联,不猜测恢复代次;重复键不改变目标。示例模拟已核验外部回执,不调用真实第三方业务系统。实际使用中由独立外部调用者保存证据后发送。

3. 失败与恢复

示例最长运行45秒,Worker排空最长5秒。NEEDS_REVIEW、FAILED、CANCELLED或Worker提前退出都会报错,不把受理回执当成业务成功。命令重新运行会生成新的独立示例流程,不属于故障时的原身份核对;生产接入方应在自身事务中保存operationKey及完整命令。

出现网络结果不明时,使用原definition/version/input/business_key和原幂等键重报。暂停不延长原截止;信号受理不表示消费。人工恢复使用六类恢复命令,不能用普通任务RetryTask绕过流程门控和预算。

示例成功后保留定义、实例、任务、信号和审计,不硬删除历史。每次运行使用唯一处理器名,避免其他Worker误消费该例子。完整命令、HTTP字段和权限见实例API。

4. 其他可执行恢复场景

公共SDK集成测试还实际运行:启动响应丢失的原键恢复;暂停/继续、定时等待、信号消费和取消;UNKNOWN执行核查、步骤结论及解除核查;剩余尝试内TASK重试与SIGNAL换代;确认PENDING后沿原查询预算继续。使用make integration在一次性环境复现。

历史激活和信号列表已接入,示例核对指定历史等待的winner与信号CONSUMED状态。实例筛选分页、更多独立业务示例及生产验收仍按计划推进。