External Task Functionality

Camunda has external tasks functionality - https://docs.camunda.org/manual/7.7/user-guide/process-engine/external-tasks/

As I see there same functionality is going to be released in the next version - 6.5.1.

For example, this functionality is mentioned in the following commits - https://github.com/flowable/flowable-engine/commit/abdd7e4db3ba8a23a962764a08268e6cbcb4eac3.

Is there any documentation about it?

This this is a very nice feature which is still under development

I think the general idea will remain the same

Two properties will be added/extended in the Service Task activity

  • type: flowable:type="external-worker"
  • topic: that identifies the nature of the work to be performed

And a new API for external tasks fetch, claim, complete operations

For the Java API have a look here


Thanks for the clarification @selkhlifi. You basically covered all the areas.

Since this is still not released and under development you can have a look at:

  • This for the BPMN documentation
  • This for the CMMN documentation

There is also a dedicated REST api under external-job-api in the flowable-external-job-rest module. There will be a dedicated Swagger documentation for it as well.

Please have a look at it, try it out and any feedback is very appreciated so we can improve on this before the final release.



We are trying to implement this.
I undersrand how we can configure and consume it in another service
However i want to know more about executing those received tasks
If i read 5 jobs at a time and want to execute it parallel and complete as and when each one finishes, then pick up new jobs without waiting for all of it to finish.
Does the acquire and lock function support that?
Also is there any implementation of external executors within flowable engine ?
Like by extending a delegate class?
We wanted to explore flowable engines task executors instead of writing our own custom threadpool executors.

Something like what camunda supports

@ExternalTaskSubscription(“scoreProvider”) // create a subscription for this topic name
public class ProvideScoreHandler implements ExternalTaskHandler {

public void execute(ExternalTask externalTask, ExternalTaskService externalTaskService) {

// only for the sake of this demonstration, we generate random data
// in a real-world scenario, we would load the data from a database
String customerId = "C-" + UUID.randomUUID().toString().substring(32);
int creditScore = (int) (Math.random() * 11);


@filiphr @maratkalibek would you happen to know any actual implementation of polling and executing in a bootstrapped manner?