什么是流程管理器
流程管理器(Process Manager)是企业集成模式中的有状态协调者:它接收事件、维护流程实例状态,并决定下一步是继续等待、发送命令还是触发补偿。与无状态路由器相比,它保存每个流程实例的进度;与专用编排引擎相比,它可以直接用消息框架加业务代码实现。适合多步、跨系统、需要超时与补偿的业务流程。
基本信息
| 与路由器区别 | 路由器无状态;流程管理器保存流程实例状态 |
|---|---|
| 与工作流引擎区别 | 可基于消息框架与业务代码实现,不依赖专用引擎 |
| 关键设计 | 状态机定义、幂等处理、超时出口与补偿动作 |
| 存储要求 | 流程状态需持久化,且与消息消费保持幂等与可恢复 |
落地要点
- 状态显式建模:每个等待点、终态与异常出口都画进状态机,不留隐含分支
- 按流程 ID 定位实例:消息先定位实例并校验当前状态,再决定是否应用
- 幂等处理:重复消息按已应用事件去重,避免重复发命令或重复扣款
- 超时任务:定时扫描超期实例,执行补偿、取消或转人工处理
- 审计轨迹:状态变化写入轨迹表,供对账、排障与合规检查
- 补偿设计:为每个已完成步骤定义对应的反向动作,并验证可重复执行
流程管理器的职责边界
| 职责 | 由流程管理器负责 | 不由它负责 |
|---|---|---|
| 状态维护 | 流程实例状态与进度 | 下游业务数据的最终一致性 |
| 决策 | 下一步发送什么命令 | 单个步骤内部的业务规则 |
| 超时 | 识别超期并触发补偿 | 底层调用的重试与超时参数 |
| 审计 | 记录状态轨迹 | 全局业务指标统计 |
状态机与幂等处理示意
状态机与幂等处理示意
# 订单履约流程(示意)
已创建 --预留库存成功--> 已预留 --支付成功--> 已支付 --已发货--> 已完成
异常出口:
预留超时 -> 取消流程,通知下单方
支付超时 -> 释放库存(补偿),标记为已取消
发货失败 -> 重试 N 次后转人工,保留当前状态
# 幂等处理
每条事件带事件 ID;实例记录已应用事件集合,重复 ID 直接丢弃
# 超时扫描
定时任务查状态停留超过阈值的实例,触发对应补偿或人工介入流程管理器常作为 Saga 编排式实现的载体:编排逻辑集中在管理器,参与者只暴露命令与事件,可观测性更好。
流程分支必须有超时出口:没有超时与补偿,一次下游抖动就会让实例永久挂起,需要人工翻库存和账单。