28.01.25

Видеокурс Camunda 8: Parallel Gateway и Call Activity

Мстислав Мартынюк
Автор:Мстислав Мартынюк
15 мин · Обучающие

Обзор


В статье рассматриваются вопросы:


  • Как вызвать один процесс из другого при помощи вызываемой активности (Call Activity);

  • Как запустить на выполнение параллельно (одновременно) несколько задач.


Это часть цикла "Изучаем Camunda 8 вместе с Reunico":



Бонус:

Тот самый манул таск
(тот самый Манул Таск из видео)

Важно! Для выполнения практического задания необходим опыт разработки в среде Spring Boot.



Call Activity


Использование Call Activity в процессах

Проблематика


При моделировании сложных процессов периодически возникает потребность:


  • Инициировать вызов процесса внутри другого процесса;

  • Обеспечить повторное использование группы элементов процесса в разных местах.


Например, технический процесс, обеспечивающий формирование шаблона документа, выгрузку его в PDF и отправку клиенту, может быть вызван в других процессах, таких как заключение сделки или регистрация нового клиента. Вместо дублирования этих действий в каждой модели, более эффективно использовать единый общий процесс.


Для таких задач в BPMN используется элемент называемый Call Activity (вызываемая активность).


Call Activity — это специализированный тип активности, который позволяет вызвать другой процесс (или подпроцесс), существующий как отдельная модель. Этот подход повышает модульность и упрощает сопровождение процессов.


Терминология


  • Parent process или процесс-родитель или вызывающий процесс – процесс, в которому расположен элемент Call Activity;

  • Child process или дочерний процесс или вызываемый процесс – процесс, который будет вызываться в Call Activity.


Основные возможности


  • Повторное использование процессов. Вместо повторного моделирования схожих действий, они выделяются в отдельный процесс, который может быть вызван из других моделей.

  • Отделение логики. Call Activity помогает разделить сложные процессы на более мелкие, облегчая их понимание и поддержку.

  • Синхронное исполнение. Процесс, вызванный через Call Activity, в Camunda 8 всегда выполняется синхронно (процесс-родитель будет ждать завершения вызова).


Настройки


  • Called Element – указывается process ID процесса, который мы хотим вызвать. При этом вместо ID конкретного процесса можно использовать выражение FEEL, что даст дополнительную гибкость;

  • Input/Output Propagation – позволяет "пробросить" дочернему процессу все переменные процесса-родителя или только заданные;

  • Inputs/Output – обеспечивает маппинг переменных процесса-родителя в переменные дочернего процесса.


Отличия от встраиваемого подпроцесса (Embedded Subprocess) – подпроцесс может исполняться только внутри процесса/подпроцесса, в который встраивается. Call Activity – может использоваться несколькими процессами.



Parallel Gateway


Parallel Gateway

Parallel Gateway или Параллельный шлюз или Развилка "И" – используется для запуска нескольких задач одновременно, чтобы сократить общее время выполнения процесса. 


Например:


  • В процессе обработки заказа может понадобиться параллельно проверить доступность товаров на складе и оформить счёт для клиента.

  • В процессе согласования документа требуется одновременно получить одобрение от нескольких участников.


Технические особенности


  • Разделение потоков. Parallel Gateway может разделить входящий поток на несколько параллельных ветвей (fork, split). Все ветви запускаются одновременно и выполняются независимо друг от друга.

  • Синхронизация потоков. Parallel Gateway может объединить несколько входящих потоков в один (join, merge). Процесс продолжается только после завершения всех параллельных ветвей.

  • Отсутствие условий. В отличие от шлюзов XOR, OR, Parallel Gateway не проверяет условия, а просто запускает нужное число потоков.

  • Исполнение потоков. Каждый поток исполняется независимо. Если хотя бы одна ветвь не завершена, синхронизация невозможна, и процесс не продолжится.


Особенности реализации в Camunda


Обратите внимание, что последовательности, создаваемые разделяющим параллельным шлюзом, выполняются одновременно, но не параллельно в понимании многопоточности. В Camunda 8 записи, создаваемые экземпляром процесса, будут записаны в одну партицию.



Практическая часть


Доработать основной процесс:


  • Заменить завершающие события на XOR шлюз;

  • Добавить элемент Call Activity в основной процесс после шлюза XOR;

  • Настроить Call Activity для вызова проверок, придумав и указав Process ID процесса, который мы будем вызывать и задать Input/Output Propagation = true;

  • После Call Activity – добавить XOR шлюз, имеющий два выходных потока с условиями. Если проверки не пройдены (переменная confirm = false), процесс завершается. Иначе - вызвать User Task.


Создать дочерний процесс, вызываемый в Call Activity:


  • Добавить сервисную задачу получения данных клиента;

  • Добавить разделяющий параллельный шлюз;

  • Создать сервисные задачи, в которых будут вызываться системы проверки клиента;

  • Добавить объединяющий параллельный шлюз;

  • Добавить Script Task, в котором будет происходить проверка результатов выполнения сервисных задач;

  • Разработать Job Worker, реализующий логику сервисных задач из пп. 1,3.


Запустить основной процесс и проверить корректность выполнения в Operate.