flowable流程引擎中包容网关、排他网关、并行网关之间的区别与联系

本文详细介绍了Flowable中的三种网关类型——排他网关(决策)、并行网关和包容网关,以及它们在业务流程中的应用场景和功能差异。强调了灵活组合使用这些网关以增强流程控制能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flowable 是一个强大的流程引擎,主要用于管理业务流程。在 Flowable 中,包容网关(Inclusive Gateway)、排他网关(Exclusive Gateway)和并行网关(Parallel Gateway)是三种不同类型的网关,它们在控制流程分支和合并方面各有特点。下面是这三种网关之间的区别与联系:

  1. 排他网关(Exclusive Gateway):

    • 也被称为决策网关。
    • 在一个流程中,排他网关用于根据一定的条件选择一个分支执行。
    • 一次只能走一个分支,其他分支被忽略。
    • 常用于处理“要么A,要么B”这种类型的决策。
  2. 并行网关(Parallel Gateway):

    • 用于同时启动多个流程分支。
    • 所有出口的分支都会被执行,不涉及条件判断。
    • 用于处理需要并行处理的任务,例如,可以同时进行的不同任务。
  3. 包容网关(Inclusive Gateway):

    • 结合了排他网关和并行网关的特点。
    • 允许基于条件的多个分支同时执行。
    • 可以看作是排他网关的扩展,它可以同时走符合条件的所有分支。
    • 用于处理“可以这个,也可以那个,还可以同时这个和那个”这类情况。

在实际应用中,这三种网关可以根据业务流程的复杂性和需求灵活选择和组合使用。例如,在一个流程中,可能先用一个排他网关来做决策,然后使用并行网关来同时执行多个任务,最后通过包容网关来合并结果。这种组合使用提供了更大的灵活性和强大的流程控制能力。
在这里插入图片描述

### 设置包容网关的条件表达式 包容网关(Inclusive Gateway)允许多条路径并发执行,只要满足相应的条件即可。这排他网关不同之处在于后者仅会选择一条符合条件的路径继续流程。 在 Flowable 中配置包容网关时,可以在 XML 定义文件中通过 `<inclusiveGateway>` 标签来声明该类型的网关,并利用流出顺序流上的条件表达式控制分支逻辑[^1]。对于每条可能被激活的路径而言,都需要为其指定特定条件下才会触发的行为模式;这些条件通常采用布尔型返回值的形式编写,以便于引擎判断是否应该沿着这条线路前进。 #### 配置实例 下面是一个简单的 BPMN 流程片段展示如何为包容网关设定多个可选方向: ```xml <process id="exampleProcess"> <!-- ... --> <startEvent id="theStart"/> <sequenceFlow sourceRef="theStart" targetRef="fork"/> <inclusiveGateway id="fork"/> <!-- Define two parallel paths with conditions --> <sequenceFlow sourceRef="fork" targetRef="taskForConditionA"> <conditionExpression xsi:type="tFormalExpression">${daysOff <= 3}</conditionExpression> </sequenceFlow> <userTask id="taskForConditionA" name="Team Leader Approval"/> <sequenceFlow sourceRef="fork" targetRef="taskForConditionB"> <conditionExpression xsi:type="tFormalExpression">${daysOff > 3 && daysOff <= 7}</conditionExpression> </sequenceFlow> <userTask id="taskForConditionB" name="Department Manager Approval"/> <joinGateway/> <!-- Joining back after both approvals are done or either one is not needed --> <inclusiveGateway id="joinGateway" gatewayDirection="Converging"/> <!-- Continue process... --> </process> ``` 此示例展示了两个不同的审批级别——团队领导批准不超过三天假期请求的任务 `taskForConditionA` 部门经理负责四至七天之间休假申请审核的工作项 `taskForConditionB`。每当到达名为 “fork”的包容网关处时,将会评估所有连接到它的序列流上所附带的条件表达式 `${daysOff <= 3}` 及 `${daysOff > 3 && daysOff <= 7}` 。如果任一条件成立,则对应的任务会被启动并行处理直到遇到汇聚节点为止[^4]。 值得注意的是,在实际应用开发过程中还可以借助 Spring 表达式语言 (SpEL) 或其他支持的语言构建更为复杂的业务规则作为条件的一部分[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

舒一笑不秃头

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值