Camunda并行网关(Parallel Gateway)使用介绍

前言

目前Camunda提供了5种不同类型的网关:Parallel Gateway(并行网关),Complex Gateway(复杂网关) ,Exclusive Gateway(独占网关),Inclusive Gateway(包容网关),Event-based Gateway(事件网关)。本文主要介绍Parallel Gateway(并行网关)。


一、并行网关使用场景

并行网关适用于,当多个条件任务同时执行完毕时,流程才能继续向下进行的场景。

二、并行网关使用示例

1.流程图

 在上述流程图中,当task-a执行完毕时,进入并行网关。只有当task-b和名为Event_Gateway_Test的message intermediate catch event组件都成功执行时,流程才会继续下去,执行task-c.

2.演示

2.1 service task任务实现

文中的service-task基于external-task实现,具体代码如下

public class ParallelGatewayTest {

    private final static Logger LOGGER = Logger.getLogger(ParallelGatewayTest.class.getName());

    public static void main(String[] args) {
        ExternalTaskClient client = ExternalTaskClient.create()
                .baseUrl("http://localhost:8080/engine-rest")
                .build();

        client.subscribe("task-a")
                .lockDuration(30000) // 默认锁定时间为20秒
                .handler((externalTask, externalTaskService) -> {

                    // 获取流程变量
                    LOGGER.info("execute task-a ");
                    LOGGER.info("ExecutionId: "+ externalTask.getExecutionId());
                    LOGGER.info("ProcessInstanceId: "+ externalTask.getProcessInstanceId());
                    LOGGER.info("complete task-a ");

                    // 完成任务
                    externalTaskService.complete(externalTask);
                })
                .open();

        // 订阅指定的外部任务
        client.subscribe("task-b")
                .lockDuration(30000) // 默认锁定时间为20秒
                .handler((externalTask, externalTaskService) -> {

                    // 获取流程变量
                    LOGGER.info("execute msg of task-b ");
                    LOGGER.info("ExecutionId: "+ externalTask.getExecutionId());
                    LOGGER.info("ProcessInstanceId: "+ externalTask.getProcessInstanceId());
                    LOGGER.info("complete task-b ");
                    // 完成任务
                    externalTaskService.complete(externalTask);
                })
                .open();
        // 订阅指定的外部任务
        client.subscribe("task-c")
                .lockDuration(30000) // 默认锁定时间为20秒,这里修改为1秒
                .handler((externalTask, externalTaskService) -> {

                    // 获取流程变量
                    LOGGER.info("execute msg of task-c ");
                    LOGGER.info("ExecutionId: "+ externalTask.getExecutionId());
                    LOGGER.info("ProcessInstanceId: "+ externalTask.getProcessInstanceId());
                    String test_input = (String) externalTask.getVariable("test_input");
                    LOGGER.info("test_input: "+test_input);
                    String test_output = (String) externalTask.getVariable("test_output");
                    //Integer output = (Integer) externalTask.getVariable("Output");
                    LOGGER.info("test_output: "+test_output);
                    LOGGER.info("complete task-c ");
                    // 完成任务
                    externalTaskService.complete(externalTask);
                })
                .open();
    }
}

2.2 执行消息中间捕获事件(message intermediate catch event)

可参见:Camunda - 消息中间捕获事件_zhao_rock_2016的博客-CSDN博客

2.3 流程执行过程

1.启动流程后,首先进入task-a中

 2.当task-a执行后,进入并行网关,可以看到task-b执行完毕,在并行网关出有1的计数标识,此时触发并行网关的另外一个条件,Event_Gateway_Test的message intermediate catch event组件还没有被执行。

 

3.当Event_Gateway_Test的message intermediate catch event组件被执行后,流程继续进入到task-c中。

 

总结

本文主要介绍Parallel Gateway(并行网关)的业务场景和使用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhao_rock_2016

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

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

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

打赏作者

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

抵扣说明:

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

余额充值