首页/开发/系统分析与架构设计速查/流程管理器(Process Manager)
架构风格与模式58 条

流程管理器(Process Manager)

集成模式中的有状态协调者:接收事件、维护流程状态并决定后续发送命令或继续等待;适合需要多步、跨系统且有补偿逻辑的业务流程。

什么是流程管理器

流程管理器(Process Manager)是企业集成模式中的有状态协调者:它接收事件、维护流程实例状态,并决定下一步是继续等待、发送命令还是触发补偿。与无状态路由器相比,它保存每个流程实例的进度;与专用编排引擎相比,它可以直接用消息框架加业务代码实现。适合多步、跨系统、需要超时与补偿的业务流程。

基本信息

与路由器区别路由器无状态;流程管理器保存流程实例状态
与工作流引擎区别可基于消息框架与业务代码实现,不依赖专用引擎
关键设计状态机定义、幂等处理、超时出口与补偿动作
存储要求流程状态需持久化,且与消息消费保持幂等与可恢复

落地要点

  • 状态显式建模:每个等待点、终态与异常出口都画进状态机,不留隐含分支
  • 按流程 ID 定位实例:消息先定位实例并校验当前状态,再决定是否应用
  • 幂等处理:重复消息按已应用事件去重,避免重复发命令或重复扣款
  • 超时任务:定时扫描超期实例,执行补偿、取消或转人工处理
  • 审计轨迹:状态变化写入轨迹表,供对账、排障与合规检查
  • 补偿设计:为每个已完成步骤定义对应的反向动作,并验证可重复执行

流程管理器的职责边界

职责由流程管理器负责不由它负责
状态维护流程实例状态与进度下游业务数据的最终一致性
决策下一步发送什么命令单个步骤内部的业务规则
超时识别超期并触发补偿底层调用的重试与超时参数
审计记录状态轨迹全局业务指标统计

状态机与幂等处理示意

状态机与幂等处理示意
# 订单履约流程(示意)
已创建 --预留库存成功--> 已预留 --支付成功--> 已支付 --已发货--> 已完成
异常出口:
  预留超时 -> 取消流程,通知下单方
  支付超时 -> 释放库存(补偿),标记为已取消
  发货失败 -> 重试 N 次后转人工,保留当前状态
# 幂等处理
每条事件带事件 ID;实例记录已应用事件集合,重复 ID 直接丢弃
# 超时扫描
定时任务查状态停留超过阈值的实例,触发对应补偿或人工介入
流程管理器常作为 Saga 编排式实现的载体:编排逻辑集中在管理器,参与者只暴露命令与事件,可观测性更好。
流程分支必须有超时出口:没有超时与补偿,一次下游抖动就会让实例永久挂起,需要人工翻库存和账单。

易错点

  • 流程状态存储与消息消费不在同一事务,重启后丢步骤或重复执行
  • 流程分支没有超时出口,实例永久挂起,只能人工介入
  • 状态机没有显式建模异常路径,遇到非预期事件直接崩掉流程
  • 补偿动作不可重复执行,重试时把已回滚的数据再改一次

数据来源与参考

  • 《Enterprise Integration Patterns》(Hohpe & Woolf)
  • Chris Richardson《Microservices Patterns》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌