# 事件冒泡
# 一、事件分类体系
# 1. 全局广播事件(信号/消息)
特性:
- 全局广播模式
 - 跨流程传播(支持流程间通信)
 - 平行捕获机制
 
传递规则:
A[发送节点] → 全局广播 → B[本流程捕获]
A → 全局广播 → C[其他流程捕获]
匹配规则:
- 必须同时满足:
- 信号/消息名称相同
 - Key值匹配(通常使用业务ID)
 
 
特殊场景:
- 流程开始节点:可不设置Key
 - 流程内捕获节点:必须设置Key(防止多实例交叉)
 
# 2. 自主触发事件(定时/条件)
特性:
- 定时事件:基于时间表达式
 - 条件事件:基于数据状态变更
 - 无传播性
 
执行原则:
触发位置 → [事件执行] → 后续流线
# 3. 冒泡传播事件(升级/错误/补偿等)
特性:
- 层级冒泡机制
 - 单次捕获原则
 - 单向传播(子流程→父流程)
 
冒泡规则:
    D[触发节点] → E[直属子流程边界]
    E  → 未捕获 → F[上级子流程边界]
    F  → 未捕获 → G[流程根边界]
特殊说明:
- 不支持同级捕获(平行审批路径隔离)
 - 补偿事件是特例(表现类似同级捕获)
 - 冒泡终止条件:首次被捕获时停止
 
# 二、关键差异对比
| 特性 | 全局消息类 | 自主触发类 | 冒泡类 | 
|---|---|---|---|
| 传播范围 | 跨流程全局 | 不传播 | 层级向上 | 
| 匹配维度 | 名称+Key | 时间/条件 | 事件类型 | 
| 捕获位置 | 任意订阅位置 | 触发位置 | 边界事件 | 
| 多实例隔离 | 依赖Key | 自动隔离 | 自动隔离 | 
# 三、设计建议
信号/消息事件:
- 必须设置业务Key(推荐使用
orderId) - 跨流程通信时建议添加命名空间前缀
 
- 必须设置业务Key(推荐使用
 冒泡事件:
- 合理规划流程层级结构
 - 注意事件类型继承关系(子流程可重新抛出)
 
补偿事件:
- 需要显式定义补偿处理器
 - 遵循"后进先出"执行顺序
 
注:所有事件处理均遵循BPMN2.0规范,不同引擎实现可能存在细微差异。