BPMN基本元素:网关 Gateways——流程的决策点

在BPMN中,网关(Gateway) 是流程的”十字路口”,用来控制流程的分支与汇合。不同的网关类型代表不同的决策逻辑。本文讲解网关的四大类型、语义差异与应用场景。

网关的核心作用

网关解决两个问题:

  1. 分支:一条流程路径分成多条(如果A则去B,否则去C)
  2. 汇合:多条流程路径汇聚为一条(等待所有分支完成后继续)

四大网关类型

排他网关(Exclusive Gateway/XOR)

决策逻辑:在多条出边中,恰好选一条执行。

特点

  • 只有一条条件为真时,才执行该分支
  • 其他分支被跳过
  • 所有出边应指定条件(或一个默认分支)
  • 汇合时无需等待——只执行的那条分支完成即可

伪代码示意

1
2
3
4
5
6
7
8
9
10
11
if (orderAmount > 1000) {
// 分支1:大额订单 → 经理审批
processLargeOrder();
} else if (orderAmount > 100) {
// 分支2:中额订单 → 自动审批
processNormalOrder();
} else {
// 分支3:小额订单 → 直接出货
shipDirectly();
}
// 所有分支都会汇合到下一个活动

常见场景

  • 根据金额级别决策
  • 根据审批结果(同意/拒绝)分支
  • 根据客户类型(VIP/普通)分流

符号

排他网关
(XOR)

并行网关(Parallel Gateway/AND)

决策逻辑所有出边同时执行,执行完成后再汇合。

特点

  • 分支时:所有出边都会执行,无条件判断
  • 汇合时:必须等待所有进入的分支都完成
  • 出边不需要条件表达式
  • 用于表示并发任务

伪代码示意

1
2
3
4
5
6
7
8
// 并行开启三个任务
parallel([
sendEmailNotification(),
generatePDF(),
updateInventory()
]);
// 等待上述三个任务都完成
await all();

常见场景

  • 通知多个部门(HR+财务+IT)同时处理
  • 生成多个报告(财务报告、业务报告、合规报告)
  • 系统初始化时并行加载多个模块

符号

并行网关
(AND)

包容网关(Inclusive Gateway/OR)

决策逻辑一条或多条出边可执行,由条件决定。

特点

  • 比排他网关灵活:多条条件都为真时,多条分支都执行
  • 汇合时:必须等待所有执行的分支完成
  • 比并行网关严格:非所有分支都执行,由条件决定
  • 复杂度最高,使用最少

伪代码示意

1
2
3
4
5
6
7
8
9
10
11
12
13
// 根据订单内容,可能执行多条分支
let tasks = [];
if (hasPhysicalGoods) {
tasks.push(shipOrder()); // 分支1:发货
}
if (needsInsurance) {
tasks.push(arrangeInsurance()); // 分支2:保险
}
if (totalAmount > 5000) {
tasks.push(notifyManager()); // 分支3:通知经理
}
// 等待执行的所有分支完成
await all(tasks);

常见场景

  • 订单处理中的可选流程(不是所有订单都需要保险)
  • 促销活动中的可选赠品(满足多个条件则赠多个礼品)

符号

包容网关
(OR)

基于事件的网关(Event-Based Gateway)

决策逻辑等待多个事件中的一个发生,然后执行对应分支。

特点

  • 与其他网关不同,基于事件而非条件
  • 分支代表不同的事件(消息、定时器、信号)
  • 第一个事件触发后,其他分支被取消
  • 常用于等待外部系统的反馈

伪代码示意

1
2
3
4
5
6
7
8
// 等待来自多个来源的消息,执行第一个到达的
await Promise.race([
waitForMessage('payment_confirmed'), // 支付确认
waitForMessage('payment_failed'), // 支付失败
waitForTimeout('30_minutes'), // 30分钟超时
waitForSignal('cancel_by_user') // 用户取消
]);
// 触发对应分支

常见场景

  • 支付流程中等待多种支付方式的确认
  • 客服工单中等待客户或系统的响应
  • 拍卖系统中等待最高出价或截止时间

符号

事件网关
(Event)

网关的分支与汇合

分支规则

网关类型 分支方式 条件
排他网关 选一 互斥条件
并行网关 全选 无条件
包容网关 选多 独立条件
事件网关 等事件 事件触发

汇合规则

网关类型 汇合方式 等待
排他网关 任一到达即汇合
并行网关 全部到达才汇合
包容网关 全部执行分支到达
事件网关 N/A(不需汇合) N/A

小案例:订单处理决策树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[开始] 

[获取订单信息]

◇ [排他网关:订单金额]
├─ > 1000元 → [经理审批] → ◇ [排他网关:审批结果]
│ ├─ 同意 → [出货]
│ └─ 拒绝 → [退款通知] → [结束]

└─ ≤ 1000元 → ◇ [并行网关:同时执行]
├─ [生成发票]
├─ [发送邮件]
└─ [更新库存]

[出货]

[结束]

小结

掌握网关:

  • ✓ 排他网关:one-or-none 逻辑
  • ✓ 并行网关:并发任务同步
  • ✓ 包容网关:灵活多分支(使用需谨慎)
  • ✓ 事件网关:基于事件触发的分支

能够设计出清晰的决策流、高效的并发与异步流程。

参考资料