Camunda信号事件(SignalEvents)是引用一个命名信号的事件。信号是全局作用域的事件(广播语义),并被传递给所有活动处理程序 Camunda消息事件包括:SignalStartEvent(信号启动事件)、SignalIntermediateCatchingEvent(信号中间捕获事件)、SignalBoundaryEvent(信号边界事件)、SignalIntermediateThrowingEvent(信号中断抛出事件)、SignalEndEvent(信号结束事件)。 本文重点介绍SignalIntermediateThrowingEvent(信号中间抛出事件)和SignalBoundaryEvent(信号边界事件),其它事件请参考camunda官方文档:https:docs。camunda。orgmanual7。15referencebpmn20events 一、设计流程图 以下通过模拟贷款利率变动,通过信号触发,通知正在审批贷款的流程,来说明如何通过信号中断抛出事件和信号边界事件的使用。 修改利率主流程: 发送信号事件节点配置: 主流程BPMN流程模型文件: ?xmlversion1。0encodingUTF8?bpmn:definitionsxmlns:bpmnhttp:www。omg。orgspecBPMN20100524MODELxmlns:bpmndihttp:www。omg。orgspecBPMN20100524DIxmlns:dchttp:www。omg。orgspecDD20100524DCxmlns:camundahttp:camunda。orgschema1。0bpmnxmlns:dihttp:www。omg。orgspecDD20100524DIxmlns:modelerhttp:camunda。orgschemamodeler1。0idDefinitions1r50pfgtargetNamespacehttp:bpmn。ioschemabpmnexporterCamundaModelerexporterVersion4。8。1modeler:executionPlatformCamundaPlatformmodeler:executionPlatformVersion7。15。0bpmn:processidProcess1k9ge07name利率修改主流程isExecutabletruebpmn:sequenceFlowidFlow0tu0a6nsourceRefStartEvent1targetRefActivity1imwq0fbpmn:sequenceFlowidFlow14w0uh2sourceRefActivity1imwq0ftargetRefEvent0pmsgcvbpmn:intermediateThrowEventidEvent0pmsgcvname利率修改信号bpmn:incomingFlow14w0uh2bpmn:incomingbpmn:outgoingFlow1akp21wbpmn:outgoingbpmn:signalEventDefinitionidSignalEventDefinition13zapm1signalRefSignal0sarl8nbpmn:intermediateThrowEventbpmn:sequenceFlowidFlow1akp21wsourceRefEvent0pmsgcvtargetRefEvent0zxowucbpmn:endEventidEvent0zxowucbpmn:incomingFlow1akp21wbpmn:incomingbpmn:endEventbpmn:userTaskidActivity1imwq0fname确认修改利率camunda:assigneedemobpmn:incomingFlow0tu0a6nbpmn:incomingbpmn:outgoingFlow14w0uh2bpmn:outgoingbpmn:userTaskbpmn:startEventidStartEvent1name启动bpmn:outgoingFlow0tu0a6nbpmn:outgoingbpmn:startEventbpmn:processbpmn:signalidSignal0sarl8nnamerateChangebpmn:signalidSignal1yyrmddnameinitRateSignalbpmndi:BPMNDiagramidBPMNDiagram1bpmndi:BPMNPlaneidBPMNPlane1bpmnElementProcess1k9ge07bpmndi:BPMNEdgeidFlow0tu0a6ndibpmnElementFlow0tu0a6ndi:waypointx215y117di:waypointx310y117bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow14w0uh2dibpmnElementFlow14w0uh2di:waypointx410y117di:waypointx512y117bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow1akp21wdibpmnElementFlow1akp21wdi:waypointx548y117di:waypointx642y117bpmndi:BPMNEdgebpmndi:BPMNShapeidEvent07p8igadibpmnElementEvent0pmsgcvdc:Boundsx512y99width36height36bpmndi:BPMNLabeldc:Boundsx497y142width66height14bpmndi:BPMNLabelbpmndi:BPMNShapebpmndi:BPMNShapeidEvent0zxowucdibpmnElementEvent0zxowucdc:Boundsx642y99width36height36bpmndi:BPMNShapebpmndi:BPMNShapeidActivity1bby0f3dibpmnElementActivity1imwq0fdc:Boundsx310y77width100height80bpmndi:BPMNShapebpmndi:BPMNShapeidEvent13sy2jxdibpmnElementStartEvent1dc:Boundsx179y99width36height36bpmndi:BPMNLabeldc:Boundsx189y142width21height14bpmndi:BPMNLabelbpmndi:BPMNShapebpmndi:BPMNPlanebpmndi:BPMNDiagrambpmn:definitions 贷款申请子流程: 信号事件接收节点配置: 子流程BPMN流程模型文件: ?xmlversion1。0encodingUTF8?bpmn:definitionsxmlns:bpmnhttp:www。omg。orgspecBPMN20100524MODELxmlns:bpmndihttp:www。omg。orgspecBPMN20100524DIxmlns:dchttp:www。omg。orgspecDD20100524DCxmlns:camundahttp:camunda。orgschema1。0bpmnxmlns:dihttp:www。omg。orgspecDD20100524DIxmlns:modelerhttp:camunda。orgschemamodeler1。0idDefinitions08dxmlvtargetNamespacehttp:bpmn。ioschemabpmnexporterCamundaModelerexporterVersion4。8。1modeler:executionPlatformCamundaPlatformmodeler:executionPlatformVersion7。15。0bpmn:processidProcess0vaumu2name贷款申请子流程isExecutabletruebpmn:startEventidStartEvent1bpmn:outgoingFlow1cd44owbpmn:outgoingbpmn:startEventbpmn:sequenceFlowidFlow1cd44owsourceRefStartEvent1targetRefActivity0gbnjodbpmn:sequenceFlowidFlow0fcescdsourceRefActivity0gbnjodtargetRefActivity1vw95p2bpmn:sequenceFlowidFlow1s86ukbsourceRefActivity1vw95p2targetRefActivity0gir1sybpmn:userTaskidActivity0gbnjodname贷款申请camunda:assigneedemobpmn:incomingFlow1cd44owbpmn:incomingbpmn:incomingFlow1agstqrbpmn:incomingbpmn:outgoingFlow0fcescdbpmn:outgoingbpmn:userTaskbpmn:userTaskidActivity1vw95p2name审批确认camunda:assigneedemobpmn:incomingFlow0fcescdbpmn:incomingbpmn:outgoingFlow1s86ukbbpmn:outgoingbpmn:userTaskbpmn:userTaskidActivity0gir1syname利率计算camunda:assigneedemobpmn:incomingFlow1s86ukbbpmn:incomingbpmn:outgoingFlow0lcq0a8bpmn:outgoingbpmn:userTaskbpmn:boundaryEventidEvent03yrq0uattachedToRefActivity0gir1sybpmn:outgoingFlow1agstqrbpmn:outgoingbpmn:signalEventDefinitionidSignalEventDefinition1xvgpofsignalRefSignal1d2gk0obpmn:boundaryEventbpmn:sequenceFlowidFlow1agstqrsourceRefEvent03yrq0utargetRefActivity0gbnjodbpmn:endEventidEvent0ghrdqwbpmn:incomingFlow0lcq0a8bpmn:incomingbpmn:endEventbpmn:sequenceFlowidFlow0lcq0a8sourceRefActivity0gir1sytargetRefEvent0ghrdqwbpmn:processbpmn:signalidSignal1d2gk0onamerateChangebpmndi:BPMNDiagramidBPMNDiagram1bpmndi:BPMNPlaneidBPMNPlane1bpmnElementProcess0vaumu2bpmndi:BPMNEdgeidFlow1cd44owdibpmnElementFlow1cd44owdi:waypointx215y117di:waypointx270y117bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow0fcescddibpmnElementFlow0fcescddi:waypointx370y117di:waypointx430y117bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow1s86ukbdibpmnElementFlow1s86ukbdi:waypointx530y117di:waypointx590y117bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow1agstqrdibpmnElementFlow1agstqrdi:waypointx650y175di:waypointx650y195di:waypointx400y195di:waypointx400y147di:waypointx370y147bpmndi:BPMNEdgebpmndi:BPMNEdgeidFlow0lcq0a8dibpmnElementFlow0lcq0a8di:waypointx690y117di:waypointx752y117bpmndi:BPMNEdgebpmndi:BPMNShapeidBPMNShapeStartEvent2bpmnElementStartEvent1dc:Boundsx179y99width36height36bpmndi:BPMNShapebpmndi:BPMNShapeidActivity12yahc7dibpmnElementActivity0gbnjoddc:Boundsx270y77width100height80bpmndi:BPMNShapebpmndi:BPMNShapeidActivity0p46s0edibpmnElementActivity1vw95p2dc:Boundsx430y77width100height80bpmndi:BPMNShapebpmndi:BPMNShapeidActivity1eaiy3qdibpmnElementActivity0gir1sydc:Boundsx590y77width100height80bpmndi:BPMNShapebpmndi:BPMNShapeidEvent0ghrdqwdibpmnElementEvent0ghrdqwdc:Boundsx752y99width36height36bpmndi:BPMNShapebpmndi:BPMNShapeidEvent0gqzs8vdibpmnElementEvent03yrq0udc:Boundsx632y139width36height36bpmndi:BPMNShapebpmndi:BPMNPlanebpmndi:BPMNDiagrambpmn:definitions 二、发起流程测试 通过demo用户登录camunda平台http:localhost:8080camundaapptasklistdefaultlogin,分别发起主子流程。 启动主流程后,流程状态如下,注意还没有到信号事件触发节点: 启动子流程后,流程状态如下,注意此时子流程在信号事件接收节点等待: 此时,数据库表中数据的状态如下: 此时,提交主流程,让主流程走到信号触发节点,由于子流程由于一直在监听该信号,子流程自动触发流程状态变化,如下: 三、信号事件接口说明 触发(抛出)一个信号(Triggering(Throwing)Signals): 信号可以通过BPMN构造,或通过JavaAPI编程构造抛出,RuntimeService提供了流式API去抛出一个信号: 广播一个信号 runtimeService。createSignalEvent(signalName)。setVariables(variables)。send();传递一个信号到单个executionruntimeService。createSignalEvent(signalName)。executionId(executionId)。setVariables(variables)。send(); 2、使用RuntimeService接口: RuntimeService。signalEventReceived(StringsignalName);RuntimeService。signalEventReceived(StringsignalName,StringexecutionId); 如果提供了executionId,则信号只会被传递给指定的execution。否则信号将会被全局抛出给所有订阅了的handler(广播)。注意:信号事件不会关联到特定的流程实例,相反,它会广播到所有流程实例。如果你需要传递给特定的流程实例,不要使用抛出信号事件(throwingsignalevent),查询出这个特定的执行(execution),然后将信号传递给这个特定的执行(execution)。 3、查询信号事件订阅(QueryingforSignalEventSubscriptions): 可以查询所有订阅了某个特定信号事件的订阅 ListExecutionexecutionsruntimeService。createExecutionQuery()。signalEventSubscriptionName(alert)。list(); 参考: https:docs。camunda。orgmanual7。15referencebpmn20eventssignalevents