Camunda消息事件(Message events)示例

Camunda消息事件(Message events)是引用已命名消息的事件。一条消息有一个名称和一个有效负载。与信号不同,消息事件总是指向单个收件人。消息事件定义是通过使用messageEventDefinition元素声明的。messageRef属性引用声明为定义根元素的子元素的消息元素。

Camunda消息事件包括:Message Start Event(消息启动事件)、Message Intermediate Catching Event(消息中间捕获事件)、Message Boundary Event(消息边界事件)、Message Intermediate Throwing Event(消息中断抛出事件)、Message End Event(消息结束事件)。

本文重点介绍Message Start Event(消息启动事件),其它事件请参考camunda官方文档:https://docs.camunda.org/manual/7.15/reference/bpmn20/events/

一、设计流程图

以下通过模拟订票业务,来说明如何通过消息触发启动流程。

发送消息主流程:

Camunda消息事件(Message events)示例_第1张图片

 

发送消息节点配置:

Camunda消息事件(Message events)示例_第2张图片

 

通过一个Java类模拟触发消息事件:

package com.example.demo1;

import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;

/**
 * 触发消息启动模拟类
 */
public class InstantiateProcessByMessageDelegate implements JavaDelegate {

    public void execute(DelegateExecution execution) {
        String type = (String)execution.getVariable("type");
        RuntimeService runtimeService = execution.getProcessEngineServices().getRuntimeService();
        if(type!=null && type.equals("tel")){
            runtimeService.startProcessInstanceByMessage("telMessage");
        }else{
            runtimeService.startProcessInstanceByMessage("pcMessage");
        }
    }
}

主流程BPMN流程模型文件:





  

    

      SequenceFlow_1

    

    

      SequenceFlow_1

      SequenceFlow_2

    

    

    

      SequenceFlow_2

      SequenceFlow_3

    

    

    

      SequenceFlow_3

    

    

  

  

    

      

        

        

      

      

        

        

      

      

        

        

      

      

        

      

      

        

        

          

        

      

      

        

      

      

        

        

          

        

      

    

  

消息事件子流程:

Camunda消息事件(Message events)示例_第3张图片

消息事件节点配置:

Camunda消息事件(Message events)示例_第4张图片

 

子流程BPMN流程模型文件:





  

    

      SequenceFlow_1

      

    

    

      SequenceFlow_1

      Flow_0waoc5v

    

    

    

      Flow_1rob1g6

    

    

      Flow_0xy81oh

      

    

    

    

      Flow_0xy81oh

      Flow_0mwncvx

    

    

    

    

    

      Flow_0waoc5v

      Flow_0mwncvx

      Flow_1rob1g6

      execution.setVariable("buyTicket","ok");

    

  

  

  

  

    

      

        

        

      

      

        

        

      

      

        

        

        

        

      

      

        

        

        

        

      

      

        

        

      

      

        

        

          

        

      

      

        

      

      

        

        

          

        

      

      

        

      

      

        

        

          

        

      

      

        

      

    

  

二、发起流程测试

通过demo用户登录camunda平台http://localhost:8080/camunda/app/tasklist/default/#/login,发起主流程。

填写流程变量type值为tel,表示要触发子流程的电话订票消息事件:

Camunda消息事件(Message events)示例_第5张图片

 

启动主流程后,通过Message Start Event(消息启动事件)自动发起子流程,流程状态如下:

Camunda消息事件(Message events)示例_第6张图片

 

如果填写流程变量type值为pc,表示要触发子流程的网站订票消息事件.

三、消息启动事件接口说明

1、如何触发消息事件?

作为一个可嵌入的流程引擎,Camunda引擎与消息的接收部分无关。这将依赖于环境,并需要特定于平台的活动,如连接到JMS (Java消息传递服务)队列/主题或处理Webservice或REST请求。因此,您必须将消息接收作为嵌入流程引擎的应用程序或基础设施的一部分来实现。接收到消息后,可以选择是使用引擎的内置关联,还是显式地交付消息以启动新的流程实例或触发等待执行。

消息启动事件可用于使用命名消息启动流程实例。这有效地允许我们使用消息名从一组可选启动事件中选择正确的启动事件。Camunda流程引擎提供了一个基本的关联机制,它可以向等待特定消息的执行发出信号,也可以用匹配的消息启动事件实例化进程。RuntimeService提供了流畅的消息相关性API:

ProcessInstance startProcessInstanceByMessage(String messageName);

ProcessInstance startProcessInstanceByMessage(String messageName, Map processVariables);

ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map processVariables);

2、如何查询消息事件订阅

引擎支持消息启动事件和中间消息事件。对于消息启动事件,消息事件订阅与特定的流程定义关联。这样的消息订阅可以使用ProcessDefinitionQuery查询:

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().messageEventSubscription("newCallCenterBooking").singleResult();

消息事件存储在数据库act_ru_event_subscr表:

Camunda消息事件(Message events)示例_第7张图片

 

参考:

https://docs.camunda.org/manual/7.15/reference/bpmn20/events/message-events/

http://www.yunchengxc.com

你可能感兴趣的:(Camunda,camunda,流程引擎,低代码,activiti,flowable)