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流程模型文件:
<?xml version="1.0" encoding="UTF-8"?> Flow_14w0uh2 Flow_1akp21w Flow_1akp21w Flow_0tu0a6n Flow_14w0uh2 Flow_0tu0a6n 贷款申请子流程:
信号事件接收节点配置:
子流程BPMN流程模型文件:
<?xml version="1.0" encoding="UTF-8"?> Flow_1cd44ow Flow_1cd44ow Flow_1agstqr Flow_0fcescd Flow_0fcescd Flow_1s86ukb Flow_1s86ukb Flow_0lcq0a8 Flow_1agstqr Flow_0lcq0a8 通过demo用户登录camunda平台http://localhost:8080/camunda/app/tasklist/default/#/login,分别发起主子流程。
启动主流程后,流程状态如下,注意还没有到信号事件触发节点:
启动子流程后,流程状态如下,注意此时子流程在信号事件接收节点等待:
此时,数据库表中数据的状态如下:
此时,提交主流程,让主流程走到信号触发节点,由于子流程由于一直在监听该信号,子流程自动触发流程状态变化,如下:
信号可以通过BPMN构造,或通过Java API编程构造抛出,RuntimeService提供了流式API去抛出一个信号:
// 广播一个信号
runtimeService .createSignalEvent("signalName") .setVariables(variables) .send();// 传递一个信号到单个executionruntimeService .createSignalEvent("signalName") .executionId(executionId) .setVariables(variables) .send(); 2、使用RuntimeService接口:
RuntimeService.signalEventReceived(String signalName);RuntimeService.signalEventReceived(String signalName, String executionId);如果提供了executionId,则信号只会被传递给指定的execution。否则信号将会被全局抛出给所有订阅了的handler(广播)。注意:信号事件不会关联到特定的流程实例,相反,它会广播到所有流程实例。如果你需要传递给特定的流程实例,不要使用抛出信号事件(throwing signal event),查询出这个特定的执行(execution),然后将信号传递给这个特定的执行(execution)。
3、查询信号事件订阅(Querying for Signal Event Subscriptions):
可以查询所有订阅了某个特定信号事件的订阅
List executions = runtimeService.createExecutionQuery() .signalEventSubscriptionName("alert") .list(); 参考:
https://docs.camunda.org/manual/7.15/reference/bpmn20/events/signal-events/
| 留言与评论(共有 0 条评论) “” |