深入探究Camunda监听器

简介: 执行监听器与任务监听器

前言

本篇不仅仅是讲解监听器功能,也是对上一篇深入探究Camunda加签问题使用执行监听器加签时为什么要在连线上设置的解答。

首先监听器分为ExecutionListener【执行监听器】和TaskListener【任务监听器】,我们知道不管是连线还是任务节点底层都有对应的执行器,所以ExecutionListener是可以设置在连线和节点上的。

接着我们说一下哪些场景下可以使用监听器去完成:

  • 动态分配节点处理人
  • 流程运行到某个节点时通知待办人
  • 统计任务处理时间
  • 处理业务逻辑

执行监听器

执行监听器的触发事件有:start、end、take;其中节点有start、end两种事件,而连线则有take事件。

给或签节点设置了开始事件和结束事件的执行监听器

开启一条流程实例测试一下,这里我们在发起流程时就把所有节点审批人参数设置好。

发起人节点调用审批通过后就触发或签节点的执行监听器开始事件,两次是因为该监听事件是设置在节点上的,而或签节点设置了两个处理人,所以它会创建两个待办任务,每个待办任务都有对应的执行器,等到或签节点有人审批通过了,就会触发执行监听器结束事件。

接下来我们改变一下设置审批人的方式,通过任务节点上的执行监听器去设置,【其实这里不需要测试的,想想就知道不行,为了能表达地更清晰吧】

@ComponentpublicclassCustomExecutionListenerimplementsExecutionListener {
@Overridepublicvoidnotify(DelegateExecutiondelegateExecution) throwsException {
System.out.println("ExecutionListener--事件:【"+delegateExecution.getEventName()+"】--触发了");
if ("start".equals(delegateExecution.getEventName())){
List<String>userOneList=newArrayList<>();
userOneList.add("zhangsan");
userOneList.add("lisi");
delegateExecution.setVariable("userOneList",userOneList);
        }
    }
}

当发起人节点审批后,会报错

说明在触发该监听器之前,流程引擎就需要知道该节点上有几个待办任务从而创建对应数量的执行器。这也是上一篇动态设置审批人时在节点前连线上设置执行监听器的原因。

当前你可以选择在节点上的执行监听器结束事件触发时去设置下一节点审批人,不过我感觉麻烦一点。

任务监听器

任务监听器的触发事件有:create, assignment, update, complete, delete or timeout。

这里我们演示常用的create、assignment、complete事件

重新部署后,把审批人设置方式再改回到发起流程时设置,然后发起流程实例,这里如果执行监听器的触发在任务监听器之前,那就更不能在任务监听器上动态设置审批人了。

先看红框标记部分,当任务监听器的完成事件触发后才会触发节点上执行监听器的结束事件,然后触发下一个节点的执行监听器开始事件,接着就是创建任务和分配任务时触发任务监听器。

绿框标记部分说明待办任务调用审批通过接口后会触发任务监听器的完成事件,如果满足了该节点完成条件,就会连续触发的待办任务对应的执行监听器结束事件。

所以动态设置审批人的条件就是要在节点执行监听器的开始事件触发之前就设置好审批人参数。

总结

附图一张,撒花完结。


相关文章
深入探究Camunda加签问题
camunda加签的两种方式
3117 0
|
XML 数据格式
Camunda常用功能
Camunda常用接口简介
4578 1
Camunda常用功能
|
监控 Java Linux
开源流程引擎Camunda
开源流程引擎Camunda
|
数据可视化 JavaScript 前端开发
BPMN 2.0 建模符号图标介绍说明
BPMN 2.0 建模符号图标介绍说明
1331 0
|
SpringCloudAlibaba NoSQL Java
Seata配置参考
SeataClient是直接集成到我们的业务微服务中,SeataClient的原理是代理我们jdbc数据源,在应用程序和数据库之间加了一层,通过添加的这一层来做事务管理。
951 0
|
存储 Java 测试技术
|
XML JSON 前端开发
bpmn.js 使用常见问题(不定时持续更新)
bpmn.js 使用常见问题(不定时持续更新)
6891 2
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
371 8
|
运维 Serverless API
Serverless 应用引擎产品使用合集之通过 API 调用 /tagger/v1/interrogate 时,出现unsupported protocol scheme "" 错误,如何处理
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。