流程持续数小时到数月、包含人工审批、超时和补偿时,不能把状态留在 Java 线程或一串定时消息中。持久工作流把步骤与等待状态保存下来,进程重启后可继续执行,并提供可观察的流程历史。
Table of contents
Open Table of contents
持久执行是什么
持久执行指引擎记录工作流事件,并通过重放恢复决策状态。工作流代码因此必须确定性:相同历史得到相同命令。网络调用、当前时间和随机数应通过引擎提供的 API 或 Activity(活动)执行。
Activity 是可能失败并重试的外部动作,例如扣库存或发邮件。它仍会遇到“外部系统成功但完成回执丢失”,所以必须携带幂等键。工作流持久化不等于外部副作用 Exactly-Once。
Temporal 与 Camunda 的侧重点
| 需求 | 优先评估 |
|---|---|
| 开发者用代码定义长期编排、自动重试和定时器 | Temporal |
| BPMN 可视化建模、人工任务、业务与技术共同治理 | Camunda |
| 只有两三个短步骤、团队已有可靠消息基础设施 | 普通编排服务 + Outbox |
BPMN 是业务流程模型与标记法,用标准图形表示任务、网关和事件。可视化不自动带来正确性;流程版本、变量兼容、权限和历史保留仍需设计。
用 Saga 模型建立直觉
运行分布式系统实验室的补偿测试下载:
mvn -Dtest=DistributedMechanismsTest#sagaCompensatesCompletedStepsInReverseOrder test
示例在支付失败后逆序归还库存。真实工作流还应持久化“库存完成、支付失败、补偿中、补偿完成”等状态,并为补偿失败设置重试上限与人工任务。
选型验收
实现一个包含定时器、重复 Activity、人工审批、取消和补偿失败的最小流程。停止 Worker 后重启,验证状态恢复;升级流程定义,验证运行中实例兼容;再测历史增长、可搜索字段、权限隔离、备份恢复和跨区域策略。
阅读 Temporal Java 开发文档和Camunda 组件文档时,围绕同一验收场景比较,不按功能数量打分。
下一步
你已经完成“分布式系统、协调与消息”章节。先运行全部分布式系统实验室下载测试,再回到Java 架构师学习路线复盘每种方案的故障边界。下一章将进入 Elasticsearch 与搜索架构。