Spring Boot Starter provides embedded client to fast handling of external tasks for Camunda BPM. An embedded client opens up a different way to handle external tasks than camunda-bpm-spring-boot-starter-external-task-client. It works on top of thrown historical events to avoid long polling when using the FetchAndLock API.
<dependency>
<groupId>io.github.omarchenko4j</groupId>
<artifactId>camunda-bpm-spring-boot-starter-external-task-embedded-client</artifactId>
<version>0.3.0</version>
</dependency>
compile("io.github.omarchenko4j:camunda-bpm-spring-boot-starter-external-task-embedded-client:0.3.0")
- We have the following process:
- Implement external task handlers:
2.1 With manually locking and completing an external task:
@Slf4j
@Component
@ExternalTaskTopicName("scoreProvider") // Specifies the topic name of external task.
public class ScoreProviderExternalTaskHandler extends AbstractExternalTaskHandler {
@Override
public void handle(ExternalTask externalTask) {
String externalTaskId = externalTask.getId();
externalTaskService.lock(externalTaskId, "WORKER", TimeUnit.SECONDS.toMillis(5)); // Manual lock.
log.info("Some logic of score provider.");
externalTaskService.complete(externalTaskId, "WORKER"); // Manual complete.
}
}
2.2 Without manually locking but with manually completing an external task:
@Slf4j
@Component
@ExternalTaskTopicName("loanGranter")
public class LoanGranterExternalTaskHandler extends ExternalTaskLockingHandler {
public LoanGranterExternalTaskHandler() {
super("WORKER", TimeUnit.SECONDS.toMillis(5));
}
@Override
protected void handleAfterLocking(ExternalTask externalTask) {
log.info("Some logic of loan granter.");
externalTaskService.complete(externalTask.getId(), workerId); // Manual complete.
}
}
2.3 Without manually locking and completing an external task:
@Slf4j
@Component
@ExternalTaskTopicName("requestRejecter")
public class RequestRejecterExternalTaskHandler extends ExternalTaskCompletingHandler {
public RequestRejecterExternalTaskHandler() {
super("WORKER", TimeUnit.SECONDS.toMillis(5));
}
@Override
protected void handleBeforeCompleting(ExternalTask externalTask) {
log.info("Some logic of request rejecter.");
}
}
- Start a process instance. It works!
Camunda External Task Embedded Client is Open Source software released under the Apache 2.0 license.