如何在流程中使用外部任务
引言
- 文档目的 在Camunda BPMN中,可以使用外部任务(External Task)来与外部系统进行交互。外部任务是一种特殊类型的活动,允许您将流程中的工作委托给外部系统或服务进行处理
功能或技巧概述
- 功能或技巧简介
- 适用场景
- 在外部系统中完成任务
实现步骤
选择 Service Task 的实现方式为 External 并设置 Topic
创建外部任务的 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
11camunda:
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
public class OrderCreateWorker {
private EnrollmentService service;
protected static final Logger LOG = LoggerFactory.getLogger(EnrollmentTask.class);
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);
}
};
}
}