如何独立部署Camunda引擎并让现有Spring Boot应用执行JavaDelegate任务

实现该架构的具体步骤
该架构基于Camunda的**外部任务模式(External Task Pattern)**实现,不需要改造现有Spring Boot应用的核心业务逻辑,也不需要修改独立Camunda引擎的核心配置,即可满足需求。
1. 服务器2:独立Camunda引擎部署配置
- 直接使用官方预打包的
Camunda Platform Run发行版部署,开箱自带Cockpit、Admin、Tasklist管理界面和Rest API组件,无需二次开发。 - 开启外部任务支持,在Camunda的
application.yml配置文件中添加如下配置:
camunda.bpm: external-task: enabled: true lock-duration: 30000 # 任务默认锁时长,可根据业务执行耗时调整
- 防火墙放行Camunda服务端口(默认8080),确保服务器1的网段可以访问服务器2的Camunda Rest API接口。
提示:如果需要开启Rest API鉴权,可同时开启Camunda的基础认证配置,后续在客户端补充账号密码即可。
2. 服务器1:现有Spring Boot应用改造
- 引入Camunda外部任务客户端依赖,注意依赖版本要和服务器2部署的Camunda引擎版本完全一致,Maven配置参考:
<dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-external-task-client</artifactId> <version>与服务器2Camunda版本匹配</version> </dependency>
- 配置外部任务客户端连接参数,在现有应用的
application.yml中添加:
camunda.bpm.client: base-url: http://服务器2IP:端口/engine-rest # 服务器2的Camunda Rest API地址 async-response-timeout: 30000 # 如果开启了Rest API认证,补充下方配置 basic-auth: username: 你的Camunda账号 password: 你的Camunda密码
- 原有JavaDelegate业务逻辑改造为外部任务处理器即可,示例代码:
// 主题名和后续流程定义中配置的任务主题保持一致即可 @ExternalTaskSubscription(topicName = "自定义业务任务主题") @Component public class BusinessTaskHandler implements ExternalTaskHandler { @Override public void execute(ExternalTask task, ExternalTaskService service) { // 此处直接编写原JavaDelegate的业务逻辑即可,参数读取、逻辑执行完全兼容 String businessParam = (String) task.getVariable("业务参数"); // 执行完成后通知Camunda引擎任务完成 service.complete(task); // 业务执行失败可调用service.handleFailure()方法上报错误信息 } }
3. 流程定义配置规则
- 使用Camunda Modeler绘制流程时,原有Service Task节点的实现类型选择「外部」,主题字段填写和上述
@ExternalTaskSubscription注解中一致的自定义主题名即可。 - 流程定义文件直接部署到服务器2的Camunda引擎中(可通过Cockpit页面上传、或者调用Rest API部署),不需要上传到服务器1的现有应用。
验证逻辑
在服务器2的Camunda Cockpit中启动流程实例,即可看到服务器1的应用自动拉取对应主题的任务执行,执行完成后Cockpit页面会显示流程自动流转到下一个节点。
内容的提问来源于stack exchange,提问作者Sunny Tambi
相关产品推荐
相关产品推荐

