如何在流程中使用外部任务

Uncategorized
1.4k words

如何在流程中使用外部任务

引言

  • 文档目的
    在Camunda BPMN中,可以使用外部任务(External Task)来与外部系统进行交互。外部任务是一种特殊类型的活动,允许您将流程中的工作委托给外部系统或服务进行处理

功能或技巧概述

  • 功能或技巧简介
  • 适用场景
    • 在外部系统中完成任务

实现步骤

  1. 选择 Service Task 的实现方式为 External 并设置 Topic
    Alt text

  2. 创建外部任务的 client

Camunda 官方提供了Java实现的clinet,社区中也提供了其他语言实现的client,下面以Java的client为例

  • 首先需要在项目中导入对应的 client 依赖
    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-external-task-client</artifactId>
    <version>7.18.0</version>
    </dependency>
  • 对 client 进行配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    camunda:
    bpm:
    client:
    base-url: http://127.0.0.1:8080/engine-rest #引擎对应的地址
    worker-id: bpez-external-task-service-work
    basic-auth:
    username: demo
    password: demo
    async-response-timeout: 20000
    max-tasks: 50
    use-priority: true
  • 具体的实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @Configuration
    public class OrderCreateWorker {

    @Autowired
    private EnrollmentService service;
    protected static final Logger LOG = LoggerFactory.getLogger(EnrollmentTask.class);

    @Bean
    @ExternalTaskSubscription("crate-order")
    public ExternalTaskHandler orderCreatorHandler() {
    return (externalTask, externalTaskService) -> {

    var variables = externalTask.getAllVariables();
    Map<String, Object> params = new HashMap<>(16);
    try {
    //TODO 创建订单
    externalTaskService.complete(externalTask, params);
    LOG.info("The External Task {} has been completed!", externalTask.getId());
    } catch (IOException e) {
    throw new RuntimeException(e);
    }

    };
    }
    }