前置说明
所有配置都在 Camunda Modeler 中完成:选中 Service Task 节点 → 右侧属性面板 → Implementation 下拉框选择对应类型 → 在下方的输入框(如 Java Class、Expression 等)填写内容。
1. External(外部任务)
填写规则
- Implementation 选
External - 下方 Topic 输入框:填写自定义的外部任务主题名(字符串,无特殊格式,仅需和外部工作器(Worker)的主题名一致)
- 可选:配置 Retry Time Cycle(任务失败后重试规则,如
R3/PT5M表示重试 3 次,每次间隔 5 分钟)
示例
- Topic 填写:
leave_approval_check(请假审批校验)、order_payment_process(订单支付处理) - Retry Time Cycle 填写:
R5/PT1M(重试 5 次,每次间隔 1 分钟)
适用场景
- 耗时较长的业务逻辑(如调用外部接口、批量处理数据),避免阻塞流程引擎
- 需要分布式部署的任务(多台机器的 Worker 可消费同一个 Topic 的任务)
- 代码和流程引擎解耦(Worker 可独立部署、扩容)
配套代码(外部 Worker 示例)
import org.camunda.bpm.client.ExternalTaskClient;
public class LeaveApprovalWorker {
public static void main(String[] args) {
// 创建外部任务客户端
ExternalTaskClient client = ExternalTaskClient.create()
.baseUrl("http://localhost:8080/engine-rest") // Camunda REST 接口地址
.asyncResponseTimeout(10000) // 异步响应超时时间
.build();
// 订阅 Topic(必须和 Modeler 中填写的 Topic 一致)
client.subscribe("leave_approval_check")
.lockDuration(60000) // 锁时长(60 秒,防止其他 Worker 重复处理)
.handler((externalTask, externalTaskService) -> {
(String) externalTask.getVariable();
(Integer) externalTask.getVariable();
leaveDays <= ;
externalTaskService.complete(externalTask, Map.of(, approve));
})
.open();
}
}

