【第八篇】Camunda系列-网关服务

2022-10-28 15:48:15 浏览数 (2)

网关篇

  网关用来控制流程的流向

1. 排他网关

排他网关(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流(当没有设置条件时,认为顺序流为true)继续流程。

绘制流程图:

对应的XML文件

流程演示

代码语言:javascript复制
   /**
     * 完成流程的部署操作
     */
    @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时,走了第二和第三条路线

0 人点赞