camunda网关:

基于数据的排他网关(Data-based Exclusive Gateway (XOR))

条件和默认顺序流 (Conditional and Default Sequence Flows)

并行网关(Parallel Gateway)

包含性网关(Inclusive Gateway)

基于事件的网关(Event-based Gateway)

一、基于数据的排他网关

Data-based Exclusive Gateway (XOR)是一个排他网关,当流程到达这个网关时,会去执行每个分支上的条件表达式,流程会沿着条件执行结果为true的分支继续进行,如果多个分支为true,则选择第一分支进行执行,如果所有的分支都为false,则报错,流程可以有默认分支,类似if else逻辑,当都为false时,走默认分支。

img

注释: 1.排他网关的流程只会走一个分支,条件执行结果为true的第一分支或者默认分支 2.如果没有满足条件的分支,流程会报错

二、条件和默认顺序流

Conditional and Default Sequence Flows严格意义上来说,这不是一种网关,它描述的是排他网关的默认条件分支和条件分支两种类型,且这两种类型都不属于网关(官方文档将这两个放到网关里进行描述,且给了一个分类,此处尊重官方文档)

img

注释: 1.else分支上的小斜线则代表默认分支流,当流程 没有满足条件执行结果为true的分支时,就走默认分支

img

注释: 1.图中棱形开始的箭头线就是条件顺序流 2.当条件结果为true时,流程就会进行到当前分支 3.条件顺序流允许多个分支并行,即可以同时走多个分支,如图,如果x==1成立,则第一user task2和最后一个user task4都会被激活 4.如果没有user task4,且条件x != 1且y!=2,流程报错${x==1}

img

注释: 1.图中user task2和user task3会被同时激活,处于并行状态

三、Parallel Gateway

Parallel Gateway并行网关,即通过此网关后的任务并行进行,或者在这个网关之前的任务并行进行

img

注释: 1.并行网关实际上实现了fork - join的功能,即在ParallelGateway1处,将流程分支fork成功多个并行分支,在ParallelGateway2处实现join,即每个分支执行到ParallelGateway2处,等到所有的分支都到达ParallelGateway2出后,再继续往下执行 2.如果不存在ParallelGateway1,只存在ParallelGateway2,则只实现了join,即所有分支到达ParallelGateway2处后,在继续往下执行 3.如果不存在ParallelGateway2,只存在ParallelGateway1,则只实现了fork,没有实现join,此时每个分支单独执行,在此图中,因为没有join,user task4会被执行两次,user task2和user task3,单独执行

四、Inclusive Gateway

Inclusive Gateway包含性网关(这个翻译好像不能准确的表达这个网关所包含的意思),包含性网关可以看做是排他网关(XOR)和并行网关的结合(Parallel Gateway),它可以在流程分支上定义条件,流程会去执行条件,并返回结果true或者false,但是它又支持多个条件同时为true,进行并行处理,像并行网关一样,简单说就是包含性网关实现了有条件的fork - join功能。

img

注释: 1.类似并行网关,实现了fork - join功能,且能想排他网关一样,每个分支带有条件 2.当x==1成立时,y==2不成立时,只会执行user task2,然后通过InclusiveGateway2,进入user task4 2.当x==1成立时,y==2也成立时,在InclusiveGateway1出进行fork,user task2和user task3并行执行,当都到达InclusiveGateway2时,进行join,进入user task4 2.当x==1、y==2都不成立时,流程报错

五、Event-based Gateway

Event-based Gateway基于事件的网关,基于事件的网关可以做出基于事件的决策,基于事件的网关的每一个分支(每一个outgoing),都是一个被捕获的中间事件(intermediate catching event),当流程到这种类型的网关,流程就会像被挂起(suspended)一样,分支(outgoing)上的事件会被创建。跟普通的流程序列(sequence flows)不一样,基于事件的网关不会真正的执行,它会等待流程事件的发生,并判断这个事件属于哪个分支,然后让流程沿着这个分支继续执行。

基于事件的网关的一些限制: 1.基于事件的网关至少要有两个及以上的分支(outgoing sequence flows) 2.基于事件的网关的分支只能是被捕获的中间事件(intermediateCatchEvent),其他的元素不被camunda engine支持 3.连接到基于事件的网关的被捕获的中间事件(intermediateCatchEvent)只能有单个传入序列流(incoming)

注释: 1.基于事件的网关的每一个分支(每一个outgoing),都是一个被捕获的中间事件(intermediate catching event) 2.当流程到基于事件的网关时,流程就会像被挂起(suspended)一样,并创建分支(outgoing)上的事件 3.基于事件的网关不会真正的执行,它会等待一个事件的发生,并判断这个事件属于哪个分支,然后让流程沿着这个分支继续执行

img

注释: 1.当流程到达Event-based Gateway时,流程被挂起,并且创建Timer Intermediate Catch Event和Signal Intermediate Catch Event事件


世间山河广,祝你得偿所愿!