Camunda信号事件示例Demo(Signal Events)
Camunda信号事件(Signal Events)是引用一个命名信号的事件。信号是全局作用域的事件(广播语义),并被传递给所有活动处理程序。。
Camunda消息事件包括:Signal Start Event(信号启动事件)、Signal Intermediate Catching Event(信号中间捕获事件)、Signal Boundary Event(信号边界事件)、Signal Intermediate Throwing Event(信号中断抛出事件)、Signal End Event(信号结束事件)。
本文重点介绍Signal Intermediate Throwing Event(信号中间抛出事件)和Signal Boundary Event(信号边界事件),其它事件请参考camunda官方文档:https://docs.camunda.org/manual/7.15/reference/bpmn20/events/
一、设计流程图
以下通过模拟贷款利率变动,通过信号触发,通知正在审批贷款的流程,来说明如何通过信号中断抛出事件和信号边界事件的使用。
修改利率主流程:
发送信号事件节点配置:
主流程BPMN流程模型文件:
贷款申请子流程:
信号事件接收节点配置:
子流程BPMN流程模型文件:
二、发起流程测试
通过demo用户登录camunda平台http://localhost:8080/camunda/app/tasklist/default/#/login,分别发起主子流程。
启动主流程后,流程状态如下,注意还没有到信号事件触发节点:
启动子流程后,流程状态如下,注意此时子流程在信号事件接收节点等待:
此时,数据库表中数据的状态如下:
此时,提交主流程,让主流程走到信号触发节点,由于子流程由于一直在监听该信号,子流程自动触发流程状态变化,如下:
三、信号事件接口说明
- 触发(抛出)一个信号(Triggering (Throwing) Signals):
信号可以通过BPMN构造,或通过Java API编程构造抛出,RuntimeService提供了流式API去抛出一个信号:
// 广播一个信号
2、使用RuntimeService接口:
如果提供了executionId,则信号只会被传递给指定的execution。否则信号将会被全局抛出给所有订阅了的handler(广播)。注意:信号事件不会关联到特定的流程实例,相反,它会广播到所有流程实例。如果你需要传递给特定的流程实例,不要使用抛出信号事件(throwing signal event),查询出这个特定的执行(execution),然后将信号传递给这个特定的执行(execution)。
3、查询信号事件订阅(Querying for Signal Event Subscriptions):
可以查询所有订阅了某个特定信号事件的订阅
参考:
http://www.yunchengxc.com