Как указать порядок выполнения в параллельном шлюзе с Camunda?

Для моих интеграционных тестов я хотел бы указать точный порядок выполнения путей параллельного шлюза. Я не хочу, чтобы параллельные пути выполнялись одновременно, а последовательно. Есть ли способ добиться этого с помощью Camunda?

Я уже пытался замедлить один путь, задержав ответ на фиктивный вызов службы, но поскольку фиктивный вызов службы не всегда используется, это решение не всегда работает.

Было бы достаточно приостановить выполнение одного пути, пока не завершится выполнение другого пути.


person Baradé    schedule 08.05.2018    source источник


Ответы (2)


Это невозможно. В механизме camunda не гарантируется, какой поток последовательности берется на параллельном шлюзе.

В любом случае в движке camunda нет реального параллелизма, поскольку каждый поток выполняется последовательно (экземпляр процесса является однопоточным). Это означает, что если берется первый поток, он выполняется до тех пор, пока не будет достигнута точка сохранения (состояние ожидания) и транзакция не будет зафиксирована. Это может быть, например, пользовательская задача или любое другое действие, которое помечено с помощью asyncBefore или asyncAfter.

После достижения этого состояния ожидания выполняется другой поток последовательности.

Для получения дополнительной информации о транзакциях в camunda, пожалуйста, прочитайте документацию о Транзакции в процессах

person Zelldon    schedule 09.05.2018

Если все исходящие потоки помечены исполнителем задания как выполняемые асинхронно, этого можно добиться, включив получение задания на основе приоритета (свойство jobExecutorAcquireByPriority в ProcessEngineConfiguration) и назначив явные приоритеты этим задачам.

Это описано в руководстве пользователя по адресу https://docs.camunda.org/manual/7.8/user-guide/process-engine/the-job-executor/#configure-the-process-engine-for-job-priorities

person Jörn Horstmann    schedule 25.05.2018