Parallel execution of business tasks with shared data


#1

I’m trying to implement the following workflow:
there are 4 separate business tasks DB task, Level1 task, Level2 task and Result task. These tasks should be executed asynchronously in parallel.

Leve2 task should start by the following condition:

  • Level1 task completed
    OR
  • Specified timeout expired (timeout = 900 milliseconds)

Result task should start by the following condition:

  • Level2 task completed
    OR
  • Specified timeout expired (timeout = 3 seconds)

So I’ve made 4 subProcesses and added the following properties to each subProcess: camunda:asyncBefore=“true” camunda:exclusive=“false”
To implement the starting conditions (to start by timer or by signal) for both cases (Level2 startup and Result startup) I’ve used Event-Based Gateway followed by two events (timer event and signal catch event) that in its turn followed by Exclusive Gateway.

In the subProcesses there are service tasks to print when the subProcesses started and service tasks that do the main processing (emulated by cycle during desired time).

In the result I have two problems:

  1. All the tasks don’t start in parallel. First DB task, then Level1 task, then with significant delay Level2 Task.
  2. I can’t find any way to implement Timer Catch Event within milliseconds timeout value (my SLA is less than second).

I am beginner in Camunda so please advice what I did wrong?

Also I asked similar questions on Activiti forum because I tried to implement the same workflow using Activiti, but no luck yet.

Thank you,
Simon

testProcess.bpmn (35.8 KB)


#2

The question is still actual.


#3

Hi @semenchikus,

you describe a very specific problem, so it’s hard to help you without a detailed look at your use case.

However, you can configure the job executor to poll the async jobs more often. Regarding the timer event, it’s not possible to use a very short time interval like milliseconds (or even few seconds). If you need this then you have to implement this by your own. For example, you could start a Java thread in background which sends a signal or message to the process instance after the timeout.

Does this help?

Best regards,
Philipp