Parallel gateway
在Flowable(前身为Activiti)中,Parallel Gateway是一种特殊的流程控制结构,用于在流程实例中并行执行多个任务或活动。它分为两种类型:并行拆分网关(Parallel Split Gateway)和并行合并网关(Parallel Join Gateway)。
并行拆分网关 (Parallel Split Gateway)
并行拆分网关允许流程实例同时进入多个分支,每个分支可以独立执行不同的任务或活动。当一个活动到达并行拆分网关时,所有出站流都会被激活,从而创建了多个并行的执行路径。
并行合并网关 (Parallel Join Gateway)
并行合并网关等待所有进入的路径完成,然后才允许流程继续。这意味着,在所有并行分支中的任务都被完成之前,流程不会从并行合并网关继续前进。
使用方法
在BPMN流程图中,你可以使用以下方式来设计包含并行网关的流程:
- 创建并行拆分网关:
- 在流程图中放置一个并行拆分网关图形,通常看起来像一个加号(+)。- 从该网关引出多条连线到不同的活动或任务上。
- 创建并行合并网关:
- 在流程图中放置一个并行合并网关图形,通常也看起来像一个加号(+),但通常位于流程的下游。- 从各个并行活动或任务引出连线到此网关上。
- 连接网关与活动:
- 使用序列流(Sequence Flow)连接拆分网关与并行活动,以及并行活动与合并网关。
示例 BPMN XML
下面是一个简单的BPMN XML示例,展示如何使用并行网关:
Xml
1<bpmn:process id="ParallelExample" isExecutable="true">
2 <bpmn:startEvent id="StartEvent"/>
3 <bpmn:parallelGateway id="ParallelSplit"/>
4 <bpmn:sequenceFlow from="StartEvent" to="ParallelSplit"/>
5
6 <bpmn:userTask id="TaskA"/>
7 <bpmn:sequenceFlow from="ParallelSplit" to="TaskA"/>
8
9 <bpmn:userTask id="TaskB"/>
10 <bpmn:sequenceFlow from="ParallelSplit" to="TaskB"/>
11
12 <bpmn:parallelGateway id="ParallelJoin"/>
13 <bpmn:sequenceFlow from="TaskA" to="ParallelJoin"/>
14 <bpmn:sequenceFlow from="TaskB" to="ParallelJoin"/>
15
16 <bpmn:endEvent id="EndEvent"/>
17 <bpmn:sequenceFlow from="ParallelJoin" to="EndEvent"/>
18</bpmn:process>
在这个例子中,StartEvent触发流程,接着到达ParallelSplit,此时流程会并行进入TaskA和TaskB。当这两个任务都完成后,流程会在ParallelJoin处合并,最后到达EndEvent。
注意事项
- 如果在并行合并网关之前有任何分支未完成,那么整个流程将会阻塞在那里,直到所有分支都完成。
- 并行网关可以嵌套使用,这意味着可以在一个并行分支内部再使用并行网关来进一步拆分和合并流程。
在实际应用中,使用并行网关可以大大提高流程的效率和响应速度,特别是在处理需要同时进行多项任务的情况。
结合flowable7.0.1列举一个简单的实现案例:
Exclusive gateway
Exclusive Gateway,也被称为XOR网关,是在BPMN(Business Process Model and Notation)中用于表示流程中单一路径选择的元素。它允许工作流在多个可能的路径中选择一条路径继续执行,但是只有一条路径会被选中。一旦条件满足,其他路径将被忽略。
Exclusive Gateway的特性:
- 条件表达式:每个从网关出去的序列流(Sequence Flow)都可以附加一个条件表达式。当流程达到网关时,这些条件会被依次评估。
- 默认流:在没有条件表达式的序列流中,可以定义一个默认流,如果所有的条件都不满足,流程将沿着默认流继续。
使用场景:
- 决策树:在流程中构建复杂的决策逻辑,如根据客户类型选择不同的服务路径。
- 错误处理:根据特定条件选择不同的错误处理流程。
- 资源分配:基于可用资源或优先级选择下一步操作。
在BPMN中的表示:
- 图形表示:Exclusive Gateway通常被描绘为一个菱形,里面有一个X或XOR字样。
- XML表示:在BPMN 2.0的XML表示中,Exclusive Gateway由bpmn:exclusiveGateway标签定义。
实际应用示例:
假设你正在设计一个订单处理流程,其中需要检查库存。如果库存足够,则继续发货;如果库存不足,则发送缺货通知。
BPMN XML示例:
Xml
1<bpmn:process id="OrderProcess" isExecutable="true">
2 <bpmn:startEvent id="StartEvent"/>
3 <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="CheckStock"/>
4 <bpmn:serviceTask id="CheckStock" implementation="checkStockService"/>
5 <bpmn:exclusiveGateway id="StockAvailableGateway">
6 <bpmn:incoming>Flow1</bpmn:incoming>
7 <bpmn:outgoing>Flow2</bpmn:outgoing>
8 <bpmn:outgoing>Flow3</bpmn:outgoing>
9 </bpmn:exclusiveGateway>
10 <bpmn:sequenceFlow id="Flow2" sourceRef="StockAvailableGateway" targetRef="ShipOrder">
11 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${inventory > 0}</bpmn:conditionExpression>
12 </bpmn:sequenceFlow>
13 <bpmn:sequenceFlow id="Flow3" sourceRef="StockAvailableGateway" targetRef="NotifyCustomer">
14 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${inventory <= 0}</bpmn:conditionExpression>
15 </bpmn:sequenceFlow>
16 <bpmn:serviceTask id="ShipOrder" implementation="shipOrderService"/>
17 <bpmn:serviceTask id="NotifyCustomer" implementation="notifyCustomerService"/>
18 <bpmn:endEvent id="EndEvent"/>
19 <bpmn:sequenceFlow id="Flow4" sourceRef="ShipOrder" targetRef="EndEvent"/>
20 <bpmn:sequenceFlow id="Flow5" sourceRef="NotifyCustomer" targetRef="EndEvent"/>
21</bpmn:process>
在这个例子中,Exclusive Gateway被用来根据库存情况选择下一步的操作。如果库存充足,流程将继续到ShipOrder服务任务;否则,将转向NotifyCustomer服务任务。
Inclusive gateway
Inclusive Gateway在BPMN(Business Process Model and Notation)中是一种非常灵活的控制流元素,允许流程沿着一个或多个出站序列流(Sequence Flow)继续,只要相应的条件为真。与Exclusive Gateway不同,Inclusive Gateway可以激活多条路径,使得流程能够同时执行多个分支。
Inclusive Gateway的特性:
- 多条件满足:Inclusive Gateway可以有多个条件表达式,如果任意一个条件表达式的结果为真,那么对应的序列流就会被激活。
- 无条件限制:即使没有条件表达式为真的情况,Inclusive Gateway也不会阻止流程的执行,而是会沿着没有条件表达式的序列流继续。
- 并发执行:Inclusive Gateway可以启动并行的执行实例,这意味着流程可以同时沿着多个符合条件的路径前进。
使用场景:
- 多条件任务执行:当需要根据多个条件来决定是否执行一系列任务时,例如,如果满足任何一项条件,都需要进行额外的审核或处理。
- 备份路径:在主路径不可用或不适用的情况下,提供备选路径。
- 并行处理:在需要同时处理多个相关任务的场景下,如并行执行多个服务调用。
在BPMN中的表示:
- 图形表示:Inclusive Gateway通常表示为一个菱形,里面有一个加号(+),表示它可以同时激活多条路径。
- XML表示:在BPMN 2.0的XML表示中,Inclusive Gateway由bpmn:inclusiveGateway标签定义。
实际应用示例:
假设一个项目管理流程,其中项目在启动前需要经过技术评审和财务评审。只要任一评审通过,项目就可以继续进行,但如果两者都通过,则可以同时进行项目规划和技术准备。
BPMN XML示例:
Xml
1<bpmn:process id="ProjectApprovalProcess" isExecutable="true">
2 <bpmn:startEvent id="StartEvent"/>
3 <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="InclusiveGateway"/>
4 <bpmn:inclusiveGateway id="InclusiveGateway">
5 <bpmn:incoming>Flow1</bpmn:incoming>
6 <bpmn:outgoing>Flow2</bpmn:outgoing>
7 <bpmn:outgoing>Flow3</bpmn:outgoing>
8 <bpmn:outgoing>Flow4</bpmn:outgoing>
9 </bpmn:inclusiveGateway>
10 <bpmn:sequenceFlow id="Flow2" sourceRef="InclusiveGateway" targetRef="TechnicalReview">
11 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${technicalReviewRequired}</bpmn:conditionExpression>
12 </bpmn:sequenceFlow>
13 <bpmn:sequenceFlow id="Flow3" sourceRef="InclusiveGateway" targetRef="FinancialReview">
14 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${financialReviewRequired}</bpmn:conditionExpression>
15 </bpmn:sequenceFlow>
16 <bpmn:sequenceFlow id="Flow4" sourceRef="InclusiveGateway" targetRef="ProjectPlanning">
17 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${technicalReviewPassed && financialReviewPassed}</bpmn:conditionExpression>
18 </bpmn:sequenceFlow>
19 <bpmn:serviceTask id="TechnicalReview" implementation="performTechnicalReview"/>
20 <bpmn:serviceTask id="FinancialReview" implementation="performFinancialReview"/>
21 <bpmn:serviceTask id="ProjectPlanning" implementation="planProject"/>
22 <bpmn:endEvent id="EndEvent"/>
23 <bpmn:sequenceFlow id="Flow5" sourceRef="TechnicalReview" targetRef="EndEvent"/>
24 <bpmn:sequenceFlow id="Flow6" sourceRef="FinancialReview" targetRef="EndEvent"/>
25 <bpmn:sequenceFlow id="Flow7" sourceRef="ProjectPlanning" targetRef="EndEvent"/>
26</bpmn:process>
在这个例子中,Inclusive Gateway被用来决定哪些评审需要进行,以及在评审通过后是否可以直接进行项目规划。如果技术评审或财务评审任一通过,相应的评审任务将被执行。如果两者都通过,项目规划将与技术评审同时开始。
Event-Based gateway
Event-Based Gateway用于基于特定事件的发生来决定流程的分支。当一个事件触发时,Event-Based Gateway将沿着相应的序列流继续流程。如果没有事件触发,则流程将暂停在网关处,直到满足某个条件的事件发生。
特性:
- 等待事件:Event-Based Gateway可以等待一个或多个事件的发生。
- 条件事件:事件可以是内部条件(如计时器)或外部事件(如消息接收)。
- 多路分支:可以有多个序列流,每个流对应一个事件或一组事件。
使用场景:
- 异常处理:根据不同类型的异常触发不同的处理流程。
- 异步消息处理:等待特定的消息到达,然后根据消息内容选择后续流程。
- 定时任务:基于定时事件触发的流程,如定期检查系统状态。
在BPMN中的表示:
- 图形表示:Event-Based Gateway通常表示为一个菱形,菱形内部有一个小圆圈,表示它等待事件的发生。
- XML表示:在BPMN 2.0的XML表示中,Event-Based Gateway由bpmn:eventBasedGateway标签定义,并且可能包含bpmn:intermediateCatchEvent元素来定义等待的事件。
实际应用示例:
假设一个客户服务流程中,客服代表在处理完客户问题后,流程需要等待客户反馈。如果客户满意,则流程结束;如果不满意,则需要重新处理。
BPMN XML示例:
Xml
1<bpmn:process id="CustomerServiceProcess" isExecutable="true">
2 <bpmn:startEvent id="StartEvent"/>
3 <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="HandleIssue"/>
4 <bpmn:serviceTask id="HandleIssue" implementation="handleIssueService"/>
5 <bpmn:sequenceFlow id="Flow2" sourceRef="HandleIssue" targetRef="WaitForFeedback"/>
6 <bpmn:eventBasedGateway id="FeedbackGateway">
7 <bpmn:incoming>Flow2</bpmn:incoming>
8 <bpmn:outgoing>Flow3</bpmn:outgoing>
9 <bpmn:outgoing>Flow4</bpmn:outgoing>
10 </bpmn:eventBasedGateway>
11 <bpmn:intermediateCatchEvent id="WaitForFeedback" gatewayDirection="Diverging">
12 <bpmn:messageEventDefinition id="MessageDefinition"/>
13 </bpmn:intermediateCatchEvent>
14 <bpmn:sequenceFlow id="Flow3" sourceRef="FeedbackGateway" targetRef="EndSatisfied">
15 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${feedback == 'satisfied'}</bpmn:conditionExpression>
16 </bpmn:sequenceFlow>
17 <bpmn:sequenceFlow id="Flow4" sourceRef="FeedbackGateway" targetRef="ReopenIssue">
18 <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${feedback != 'satisfied'}</bpmn:conditionExpression>
19 </bpmn:sequenceFlow>
20 <bpmn:serviceTask id="ReopenIssue" implementation="reopenIssueService"/>
21 <bpmn:endEvent id="EndSatisfied"/>
22 <bpmn:endEvent id="EndUnsatisfied"/>
23 <bpmn:sequenceFlow id="Flow5" sourceRef="ReopenIssue" targetRef="EndUnsatisfied"/>
24</bpmn:process>
在这个例子中,Event-Based Gateway(FeedbackGateway)用于等待客户反馈,然后根据反馈是否满意决定流程是结束还是重新打开问题处理流程。
版权归原作者 myskybeyond 所有, 如有侵权,请联系我们删除。