知识卡片
计时器事件与消息事件,及事件子流程实现流程中断
内容
BPMN中的事件代表”发生了某件事情”,流程通过”捕捉”事件来做出反应。计时器事件单纯等待设定好的时间到来,有两种用法:放在顺序流中,表示流程要在这个点等待固定时长(比如等一天的可撤销期);作为边界事件挂在某个任务上,只要流程还停在这个任务里,就能响应这个计时器(比如支付确认任务上挂一个5天的边界计时器,5天内没支付成功,工作流引擎就取消当前任务、走向另一条顺序流结束流程——虽然这未必是处理支付延迟的最佳业务方案,但技术机制是这样运作的)。消息事件则是从工作流引擎外部发到流程实例里的触发动作,可能启动一个新流程实例,也可能让已有实例继续往前走——容易产生的误解是把BPMN”消息”和消息代理画等号,但实际上BPMN消息泛指任何来自引擎外部的触发,可能是简单的REST API调用,也可能真的来自消息代理或事件代理,需要写胶水代码去连接(部分厂商也提供开箱即用的连接器)。消息事件经常和事件子流程结合使用,让你能在收到消息时中断流程实例,且这种中断和流程实例当前正等待的任务无关——一个典型例子是:不管订单履约流程当前是刚要收款还是已经要发货,一旦收到取消订单请求,就该立刻中断整个流程(至于中断后如何恢复一致性,比如需要退款,这类策略会在讨论分布式一致性的章节里展开)。
参考来源
- 位置:《流程自动化实战:系统架构和软件开发视角》第3章《开发流程解决方案》"3.1.6 事件:等待它的发生""3.1.7 消息事件:等待一些事情发生"(源文件:_epub-src/EPUB/xhtml/Section0001_0006.xhtml)
- 结论依据:原文区分顺序流中的计时器事件与边界计时器事件两种用法,说明消息事件泛指引擎外部触发(不限于消息代理),并用取消订单请求需要立即中断流程的例子说明事件子流程实现的中断机制,直接支撑本卡片结论。
- 原始内容:第一个计时器在顺序流中,它表示流程要在计时器事件这个点上等待一天……如果到期没有支付成功,工作流引擎将取消当前的任务……BPMN消息只是指来自工作流引擎之外的触发动作……如果收到取消订单的请求,就要立即中断订单履约流程,无论我们是刚要开始收款,还是已经要发货了。