Flowable常用网关使用介绍

1. 排他网关

(1) 说明

        排他网关,也叫异或网关,用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流继续流程。

(2)示例

  <process id="demo" name="demo" isExecutable="true">
    <startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
    <endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="处理2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
    <exclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="处理1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
    <sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <sequenceFlow id="sid-265bddbe-52da-4a39-bc92-504cbb1b647a" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-bbf50145-cfca-475f-9634-29016514b070" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days<=3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>3}]]></conditionExpression>
    </sequenceFlow>
  </process>

         变量a小于等于3走业务1流程;变量a大于3走业务2流程。

2. 并行网关

(1) 说明

        并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的。并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

(2)示例

  <process id="demo" name="demo" isExecutable="true">
    <startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
    <endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
    <serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
    <sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0"/>
    <sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1"/>
    <parallelGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <parallelGateway id="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
    <sequenceFlow id="sid-9eb7f88c-4645-4e5b-a0e5-783247494a4d" sourceRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-89985f4a-e470-4564-b119-3b43a7c0c293" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
    <sequenceFlow id="sid-daaa7ecb-d315-4e0a-bcd9-7d56e6cb08ec" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
  </process>

        业务1、业务2都处理,并且当业务1、业务2都完成后才会汇聚走下面的业务流程。

3. 包含网关

(1) 说明

        包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。

(2)示例

  <process id="demo" name="demo" isExecutable="true">
    <startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
    <endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
    <serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
    <sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" name="小于等于3">
      <conditionExpression><![CDATA[${days<=3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" name="大于等于3">
      <conditionExpression><![CDATA[${days>=3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-9eb7f88c-4645-4e5b-a0e5-783247494a4d" sourceRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-89985f4a-e470-4564-b119-3b43a7c0c293" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
    <sequenceFlow id="sid-daaa7ecb-d315-4e0a-bcd9-7d56e6cb08ec" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
    <inclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <inclusiveGateway id="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
  </process>

        变量a小于3走业务1流程;变量a大于3走业务2流程;变量等于3时业务1、业务2同时走。

4. 事件网关

(1) 说明

        事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。与此同时,会为每个外出顺序流创建相对的事件订阅。

(2)示例

  <signal id="signalName" name="开始信号"/>
  <process id="demo" name="demo" isExecutable="true">
    <startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" />
    <endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
    <serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
    <sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <inclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
    <intermediateCatchEvent id="sid-a647b93a-8d3b-4299-838b-27fa595da541">
      <timerEventDefinition>
        <timeDuration>PT3M</timeDuration>
      </timerEventDefinition>
    </intermediateCatchEvent>
    <intermediateCatchEvent id="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7">
      <signalEventDefinition signalRef="signalName"/>
    </intermediateCatchEvent>
    <sequenceFlow id="sid-b906014f-4aae-4725-a44a-e1e7d90f3108" sourceRef="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1"/>
    <sequenceFlow id="sid-61eea14c-4e3d-46c6-943e-dad9b0c4ed9a" sourceRef="sid-a647b93a-8d3b-4299-838b-27fa595da541" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0"/>
    <sequenceFlow id="sid-c01db09c-691b-4f51-8b75-09d9efb8a064" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-a647b93a-8d3b-4299-838b-27fa595da541">
      <conditionExpression xsi:type="tFormalExpression"/>
    </sequenceFlow>
    <sequenceFlow id="sid-32cb76de-e937-4328-9223-d925c5d2a623" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7">
      <conditionExpression xsi:type="tFormalExpression"/>
    </sequenceFlow>
    <sequenceFlow id="sid-62ad80c7-aa51-413a-a4a8-00047388c7d6" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
    <sequenceFlow id="sid-bfcd1eda-5854-4632-b654-7119f7d335a6" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
  </process>

         定时任务和信号事件谁先触发就执行那路的流程业务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
并行网关Flowable工作流引擎中的一个重要组件,用于同时执行多个并发的执行流。它可以将一个执行流分岔成多个同时执行的执行流,并将多个执行流合并为一个执行流。与其他网关不同的是,并行网关不会解析流条件,即使顺序流中定义了流条件,也会被忽略。并行网关可以同时具有分岔和合并两种行为,允许多个执行流到达该网关时被合并,然后再随机分岔为多个执行流。因此,并行网关在处理多个并发执行流时非常灵活和强大。 同时,包含网关也可以充当并行网关的角色。包含网关是排他网关和并行网关的结合体,可以选择多于一条顺序流,并且在执行流中具有分岔和合并的行为。当包含网关作为并行网关使用时,它遵循并行网关的特性,既有分岔行为也有合并行为。与并行网关不同的是,包含网关还可以解析流条件,并根据条件选择不同的顺序流进行执行。因此,包含网关在流程中的使用非常灵活,既可以用作排他网关,也可以用作并行网关。 总结来说,Flowable中的并行网关是一个同时执行多个并发执行流的组件,可以实现分岔和合并的行为,而包含网关则是排他网关和并行网关的结合体,既可以充当排他网关,也可以充当并行网关。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郑重其事,鹏程万里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值