# 事件冒泡

# 一、事件分类体系

# 1. 全局广播事件(信号/消息)

特性

  • 全局广播模式
  • 跨流程传播(支持流程间通信)
  • 平行捕获机制

传递规则

A[发送节点] → 全局广播 → B[本流程捕获]
A → 全局广播 → C[其他流程捕获]

匹配规则

  • 必须同时满足:
    • 信号/消息名称相同
    • Key值匹配(通常使用业务ID)

特殊场景

  • 流程开始节点:可不设置Key
  • 流程内捕获节点:必须设置Key(防止多实例交叉)

# 2. 自主触发事件(定时/条件)

特性

  • 定时事件:基于时间表达式
  • 条件事件:基于数据状态变更
  • 无传播性

执行原则

触发位置 → [事件执行] → 后续流线

# 3. 冒泡传播事件(升级/错误/补偿等)

特性

  • 层级冒泡机制
  • 单次捕获原则
  • 单向传播(子流程→父流程)

冒泡规则

    D[触发节点] → E[直属子流程边界]
    E  → 未捕获 → F[上级子流程边界]
    F  → 未捕获 → G[流程根边界]

特殊说明

  • 不支持同级捕获(平行审批路径隔离)
  • 补偿事件是特例(表现类似同级捕获)
  • 冒泡终止条件:首次被捕获时停止

# 二、关键差异对比

特性 全局消息类 自主触发类 冒泡类
传播范围 跨流程全局 不传播 层级向上
匹配维度 名称+Key 时间/条件 事件类型
捕获位置 任意订阅位置 触发位置 边界事件
多实例隔离 依赖Key 自动隔离 自动隔离

# 三、设计建议

  1. 信号/消息事件

    • 必须设置业务Key(推荐使用orderId
    • 跨流程通信时建议添加命名空间前缀
  2. 冒泡事件

    • 合理规划流程层级结构
    • 注意事件类型继承关系(子流程可重新抛出)
  3. 补偿事件

    • 需要显式定义补偿处理器
    • 遵循"后进先出"执行顺序

注:所有事件处理均遵循BPMN2.0规范,不同引擎实现可能存在细微差异。