环境:
消息事件是引用命名消息的事件。消息具有名称和有效负载。与信号不同,消息事件始终指向单个接收器。
使用该messageEventDefinition
元素声明消息事件定义。该属性messageRef
引用message
声明为definitions
根元素的子元素的元素。以下是一个过程的摘录,其中两个消息事件由start事件和中间捕获消息事件声明和引用。
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples">
<message id="newInvoice" name="newInvoiceMessage" />
<message id="payment" name="paymentMessage" />
<process id="invoiceProcess">
<startEvent id="messageStart" >
<messageEventDefinition messageRef="newInvoice" />
</startEvent>
...
<intermediateCatchEvent id="paymentEvt" >
<messageEventDefinition messageRef="payment" />
</intermediateCatchEvent>
...
</process>
</definitions>
作为可嵌入的流程引擎,Flowable并不关心实际接收消息。这将取决于环境并且需要特定于平台的活动,例如连接到JMS(Java消息服务)队列/主题或处理Web服务或REST请求。因此,接收消息是您必须实现的过程引擎嵌入的应用程序或基础结构的一部分。
在应用程序中收到消息后,您必须决定如何处理它。如果消息应触发新流程实例的启动,请在运行时服务提供的以下方法之间进行选择:
ProcessInstance startProcessInstanceByMessage(String messageName);
ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);
ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey,
Map<String, Object> processVariables);
这些方法使用引用的消息启动流程实例。
如果消息需要由现有流程实例接收,则首先必须将消息关联到特定流程实例(请参阅下一节),然后触发等待执行的继续。运行时服务提供以下方法,用于根据消息事件订阅触发执行:
void messageEventReceived(String messageName, String executionId);
void messageEventReceived(String messageName, String executionId, HashMap<String, Object> processVariables);
ProcessDefinitionQuery
:ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.messageEventSubscription("newCallCenterBooking")
.singleResult();
由于特定邮件订阅只能有一个流程定义,因此查询始终返回零或一个结果。如果更新了流程定义,则只有最新版本的流程定义才能订阅消息事件。
ExecutionQuery
:Execution execution = runtimeService.createExecutionQuery()
.messageEventSubscriptionName("paymentReceived")
.variableValueEquals("orderId", message.getOrderId())
.singleResult();
此类查询称为相关查询,通常需要有关进程的知识(在这种情况下,给定orderId最多只有一个流程实例)。
消息在接收messageEventReceived的时候,会触发对应边界消息事件。
2、流程图
消息定义定义
<message id="newInvoice" name="newInvoiceMessage" />
中间消息抛出事件定义以及消息引用
<intermediateCatchEvent id="intermediatemessageevent" name="中间消息抛出事件">
<messageEventDefinition messageRef="newInvoice"></messageEventDefinition>
</intermediateCatchEvent>
<boundaryEvent id="boundarymessage" name="边界消息事件" attachedToRef="usertask" cancelActivity="true">
<messageEventDefinition messageRef="newInvoice"></messageEventDefinition>
</boundaryEvent>
部署
deploy()
启动
startProcessInstanceByKey()
接收消息
receiveMessage()
查看数据表
SELECT * FROM flowable.ACT_RU_EXECUTION;
SELECT * FROM flowable.ACT_RU_EVENT_SUBSCR;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。