文章目录

  • 1. 消息事件定义
    • 1.1 简介
    • 1.2 触发消息事件
    • 1.3 查询消息事件的订阅
  • 2. 消息中间事件
    • 2.1 简介
    • 2.2 流程设计
    • 2.3 测试类
    • 2.4 运行
      • 2.4.1 启动任务
  • 源码地址
  • 项目推荐

部分简介摘抄自官方文档
参考杨大仙的程序空间https://my.oschina.net/JavaLaw

*后台服务基于Springboot2 + Activiti6,整合文章请参考:https://blog.csdn.net/yy756127197/article/details/101211510 不需要流程设计器就排除3,4步骤 *

1. 消息事件定义

1.1 简介

消息事件是一种引用了消息定义的事件,与信号时间不同的是,消息只能只想一个接收人,不能像信号事件一样广播。
分为消息开始事件和中间消息事件。

1.2 触发消息事件

消息开始事件

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);

1.3 查询消息事件的订阅

消息开始事件

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

因为同时只能有一个流程定义关联到消息的订阅点,查询总是返回0或一个结果。 如果流程定义更新了, 那么只有最新版本的流程定义会订阅到消息事件上。

消息中间事件

Execution execution = runtimeService.createExecutionQuery().messageEventSubscriptionName("msg").processInstanceId(pi.getId()).singleResult();

2. 消息中间事件

2.1 简介

消息中间事件作为流程一个节点使用

2.2 流程设计

场景:用户支付成功后等待一分钟,商家发货

设置消息定义

流程图

流程文件bpmn

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><signal id="pay" name="pay" activiti:scope="global"></signal><message id="msg" name="msg"></message><process id="messageEvent" name="messageEvent" isExecutable="true"><documentation>messageEvent</documentation><startEvent id="startEvent1"></startEvent><sequenceFlow id="sid-D5F258A9-0F46-4962-AD44-589CC798FDBB" sourceRef="startEvent1" targetRef="sid-73B507A7-8A99-462D-B354-A0C61337E657"></sequenceFlow><intermediateCatchEvent id="sid-73B507A7-8A99-462D-B354-A0C61337E657"><messageEventDefinition messageRef="msg"></messageEventDefinition></intermediateCatchEvent><userTask id="sid-147E3B0E-76DC-4D58-8D5A-ECD25280AA8A" name="用户任务" activiti:assignee="msgUser"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-1F79F1F5-BB81-4100-8EC5-4B0C5B818B25" sourceRef="sid-73B507A7-8A99-462D-B354-A0C61337E657" targetRef="sid-147E3B0E-76DC-4D58-8D5A-ECD25280AA8A"></sequenceFlow><endEvent id="sid-AA796559-C664-475B-A525-516489EE26C0"></endEvent><sequenceFlow id="sid-2B7DA672-5026-4545-8110-A105ACD31665" sourceRef="sid-147E3B0E-76DC-4D58-8D5A-ECD25280AA8A" targetRef="sid-AA796559-C664-475B-A525-516489EE26C0"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_messageEvent"><bpmndi:BPMNPlane bpmnElement="messageEvent" id="BPMNPlane_messageEvent"><bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"><omgdc:Bounds height="30.0" width="30.0" x="165.0" y="150.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-73B507A7-8A99-462D-B354-A0C61337E657" id="BPMNShape_sid-73B507A7-8A99-462D-B354-A0C61337E657"><omgdc:Bounds height="30.0" width="30.0" x="300.0" y="150.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-147E3B0E-76DC-4D58-8D5A-ECD25280AA8A" id="BPMNShape_sid-147E3B0E-76DC-4D58-8D5A-ECD25280AA8A"><omgdc:Bounds height="80.0" width="100.0" x="435.0" y="125.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-AA796559-C664-475B-A525-516489EE26C0" id="BPMNShape_sid-AA796559-C664-475B-A525-516489EE26C0"><omgdc:Bounds height="28.0" width="28.0" x="630.0" y="151.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sid-D5F258A9-0F46-4962-AD44-589CC798FDBB" id="BPMNEdge_sid-D5F258A9-0F46-4962-AD44-589CC798FDBB"><omgdi:waypoint x="195.0" y="165.0"></omgdi:waypoint><omgdi:waypoint x="300.0" y="165.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-2B7DA672-5026-4545-8110-A105ACD31665" id="BPMNEdge_sid-2B7DA672-5026-4545-8110-A105ACD31665"><omgdi:waypoint x="535.0" y="165.0"></omgdi:waypoint><omgdi:waypoint x="630.0" y="165.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-1F79F1F5-BB81-4100-8EC5-4B0C5B818B25" id="BPMNEdge_sid-1F79F1F5-BB81-4100-8EC5-4B0C5B818B25"><omgdi:waypoint x="330.0" y="165.0"></omgdi:waypoint><omgdi:waypoint x="435.0" y="165.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

2.3 测试类

MessageEventTest.java

import com.it.cloud.modules.activiti.service.IActReModelService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** 消息中间事件*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class MessageEventTest {@Autowiredprivate IActReModelService actReModelService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate RepositoryService repositoryService;@Autowiredprivate TaskService taskService;@Autowiredprivate HistoryService historyService;/*** 部署流程定义*/@Testpublic void deploy() {Deployment deployment = repositoryService.createDeployment() // 创建部署.addClasspathResource("diagrams/messageEvent.bpmn20.xml") // 加载流程资源文件.name("messageEvent流程") // 流程名称.deploy(); // 部署System.out.println("流程部署ID:" + deployment.getId());System.out.println("流程部署Name:" + deployment.getName());}/*** 启动流程实例*/@Testpublic void start() throws InterruptedException {ProcessInstance pi = runtimeService.startProcessInstanceByKey("messageEvent"); // 流程定义表的KEY字段值System.out.println("流程实例ID:" + pi.getId());System.out.println("流程定义ID:" + pi.getProcessDefinitionId());System.out.println("-------------------完美的分割线-------------------");// 查询任务Execution execution = runtimeService.createExecutionQuery().messageEventSubscriptionName("msg").processInstanceId(pi.getId()).singleResult();System.out.println("Execution: " + execution);runtimeService.messageEventReceived("msg", execution.getId());// 睡一会Thread.sleep(1000 * 3);// 查询任务Task task = taskService.createTaskQuery().taskAssignee("msgUser") // 指定某个人.singleResult();System.out.println("任务名称: " + task.getName());taskService.complete(task.getId());}
}

2.4 运行

运行deploy()

2.4.1 启动任务

运行start()

效果:


源码地址

IT-CLOUD-ACTIVITI6
开源项目,持续更新中,喜欢请 Star~

项目推荐

IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
开源项目,持续更新中,喜欢请 Star~

【弄nèng - Activiti6】Activiti6入门篇(十七)—— 消息中间事件相关推荐

  1. 【弄nèng - Skywalking】入门篇(二)—— Skywalking集群部署

    文章目录 一. 安装OAP 1.1 前置 1.2 下载 1.3 修改配置application.yml 1.4 高级部署 1.5 webapp配置 1.6 启动 二. 使用Agent 2.1 修改配置 ...

  2. 【弄nèng - Grafana】入门篇(十)—— Dashboard默认时间范围和刷新时间设置

    文章目录 1. Dashboard通用设置 General 2. 修改Dashboard默认时间范围 3. 修改某个Panel时间 项目推荐 Dashboard修改默认时间范围 1. Dashboar ...

  3. 【弄nèng - SpringCloud】应用篇 —— 整合Zipkin【Finchley版】

    文章目录 1. Zipkin简介 2.术语 N. 插一杠子 N.1 下载Zipkin-server jar N.2 启动jar 3. 使用 3.1 it-zipkin-server 3.2 gatew ...

  4. 两轴插补速度怎么给定_快速入门 | 篇十七:运动控制器多轴插补运动指令的使用...

    以下是图文详解 本节内容主要分为三大部分:插补运动.轨迹前瞻以及SP速度指令. 一 插补运动 插补是机床数控系统依照一定方法确定刀具运动轨迹的过程,插补是一个实时进行的数据密化的过程,不论是何种插补算 ...

  5. 快速入门 | 篇十七:运动控制器多轴插补运动指令的使用

    视频教程:<视频教程:运动控制器多轴插补运动指令的使用> 以下是图文详解 本节内容主要分为三大部分:插补运动.轨迹前瞻以及SP速度指令. 一 插补运动 插补是机床数控系统依照一定方法确定刀 ...

  6. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  7. 【弄nèng - Activiti6】Activiti6入门篇(十四)—— 补偿边界事件

    文章目录 1. 简介 1.1 中间事件 1.2 补偿中间事件 2. 补偿边界事件 2.1 简介 2.2 流程设计 2.3 测试类 2.4 运行 2.4.1 启动任务 源码地址 项目推荐 部分简介摘抄自 ...

  8. 【分享】 [教学]破解完全入门篇

    [分享] [教学]破解完全入门篇 3PtVw f   q85y)_c?   #r."#)pD   第一章--前言 /.$hZ$ q   好多哥们儿说看教程跟老大的书都看不太明白,所以,我尽量 ...

  9. 每天15分钟JMeter入门篇(二):使用JMeter实现并发测试

    每天15分钟JMeter入门篇(一):Hello JMeter 每天15分钟JMeter入门篇(二):使用JMeter实现并发测试 每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器 ...

  10. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

最新文章

  1. 在 VC6 中使用 GdiPlus-使用
  2. 不是计算机专业学python能找到工作吗-本科学历,非计算机专业,想学Python找工作靠谱吗?...
  3. android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架
  4. 高一计算机专业班主任工作总结,2016学年上学期高一班主任工作总结
  5. Django - 中间件
  6. 《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 1.4 内容安排
  7. linux查看cpu核数_我们常说的CPU核数指的是什么?
  8. 商户定价模型—风控人又一经典必学知识
  9. 关于WP7中的90M内存限制问题及设计原则
  10. mysql 关闭autocommit_mysql禁用autocommit,以及遇到的问题
  11. Beginning WF 4.0翻译——第一章(创建一个简单的工作流)续二
  12. a+aa+aaa+......+a......a(n个a)之和
  13. QQ被盗恢复原来QQ的好友有妙招
  14. java dns缓存清理_jvm dns缓存问题解决方式
  15. 打造类手机刷机的win10 recovery镜像
  16. Python关于人脸图片转换128/512维度向量的两种做法
  17. 解决程序中出现小方块问题
  18. vue吸管拾色器、利用canvas获取坐标点颜色、canvas获取坐标点颜色图片跨域、图片转base64、colorPicker
  19. 世界五百强中国上榜公司首次超过美国;现代汽车发布电动汽车品牌IONIQ | 美通企业日报...
  20. TCP协议网络安全攻击

热门文章

  1. 服务网格在好未来学而思网校的实践和思考
  2. iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
  3. 【Scratch考级99图】图36-等级考试scratch绘制复杂图形中间带凸点正方形花 少儿编程 scratch画图案例教程
  4. javase2021最强学习线路没有之一
  5. 来诈金花嘛?Python实现的那种
  6. PM2.5的加重,和建筑工地关系大不大?(附扬尘治理方案)
  7. 安装的photoshop cs2为什么一进去就说我的用户名、组织、或序列号无效或错误???
  8. C网跟G网是什么意思?
  9. 基于 Spark 的文本情感分析
  10. java 长链接转短链接_java长链接转短链接代码和如何跳转使用