第八篇Camunda系列-网关服务
Posted 波波烤鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八篇Camunda系列-网关服务相关的知识,希望对你有一定的参考价值。
网关篇
网关用来控制流程的流向
1. 排他网关
排他网关
(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流(当没有设置条件时,认为顺序流为true)继续流程。
绘制流程图:
对应的XML文件
流程演示
/**
* 完成流程的部署操作
*/
@Test
public void deploy()
Deployment deploy = repositoryService.createDeployment()
.name("排他网关")
.addClasspathResource("flow/排他网关.bpmn")
.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
/**
* 通过流程定义Id 启动
*/
@Test
public void startFlow()
String processId = "Process_0eykic0:1:efadfc92-39c9-11ed-8f13-c03c59ad2248";
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processId);
System.out.println("processInstance.getId() = " + processInstance.getId());
/**
* 完成任务
*/
@Test
public void completeTask()
Map<String,Object> map = new HashMap<>();
map.put("day",4);
taskService.complete("21a323ee-39ca-11ed-8b49-c03c59ad2248",map);
传递的是day=4
会走中间的路线。
2. 并行网关
并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的:
-
fork分支:并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
-
join汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
3.包含网关
包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
包含网关的功能是基于进入和外出顺序流的:
-
分支: 所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
-
汇聚:所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程token的进入顺序流的分支都到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。
当输入day=4
时,走了第二和第三条路线
以上是关于第八篇Camunda系列-网关服务的主要内容,如果未能解决你的问题,请参考以下文章