网关用于控制流程走向,根据功能不同可以划分为以下4种网关:
排他网关
用来对流程中的决定进行建模,流程执行到该网关时,按照输出流的顺序逐个计算,当条件为true时,继续执行当前网关的输出流。
如果多个线路的计算结果都为true,那么只会执行第一个值为true的网关,忽略其他表达式的值为true的网关。如果多个网关计算结果没有为true的值,则引擎会抛出异常。
并行网关
并行网关用来对并发的任务进行流程建模,它能把单条线路任务拆分(fork)成多个路径并行执行或将多条线路合并(join).
并行网关的功能取决于输入、输出顺序流:
拆分:并行执行所有的输出顺序流,并且为每一条顺序流创建一个并行执行路线;
合并:所有从并行网关拆分并执行完成的线路均再次等候,知道所有的线路都执行完成才继续向下执行。
并行网关还允许在线路上嵌套并行网关,也就是在fork拆分的线路上再添加n个fork线路,只要保证最后又一个join点合并拆分的线路即可。
包容网关
包容网关融合了排他网关和并行网关的特性,排他网关允许再每条线路上设置条件,并行网关可以同时执行多条线路,包容网关即可以同时执行多条线路,又允许再网关上设置条件。
拆分:计算每条线路上的表达式,当表达式计算结果为true时,创建一个并线线路并继续执行;
合并:所有从并行网关拆分并执行完成的线路均再次等候,直到所有的线路都执行了才继续向下执行。
事件网关
事件网关是专门为中间捕获事件设置的,它允许设置多个输出流指向多个不同的中间捕获事件(最少2个)。在流程执行到事件网关后,流程处于“等待”状态,因为中间捕获事件需要依赖中间抛出事件触发才能更改“等待”状态为“活动”状态,定时器捕获事件除外(它由时间驱动)。
关于时间网关需要注意几点:
1、事件网关的输出流数量必须大于2个;
2、事件网关的输出流类型只能是中间捕获事件,activiti不支持接受任务后面的事件网关;
3、中间捕获事件的输出流只能有一个。