Видеокурс Camunda 8: Parallel Gateway и Call Activity
Обзор
В статье рассматриваются вопросы:
-
Как вызвать один процесс из другого при помощи вызываемой активности (Call Activity);
-
Как запустить на выполнение параллельно (одновременно) несколько задач.
Это часть цикла "Изучаем Camunda 8 вместе с Reunico":
-
Предыдущая статья: DMN и оркестрация сервисов;
Бонус:

Важно! Для выполнения практического задания необходим опыт разработки в среде Spring Boot.
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 может разделить входящий поток на несколько параллельных ветвей (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.
другие статьи
Смотреть всёВидеокурс Camunda 8: DMN и оркестрация сервисов
Видеокурс Camunda 8: Сервисные задачи и шлюзы
Видеокурс Camunda 8: User Tasks & Camunda Forms
Статья описывает, как управлять задачами пользователей в Camunda 8 или как сделать людей участниками исполняемого бизнес-процесса.