Шлюзы в BPMN (gateways) это такие развилки, которые либо распараллеливают процесс на несколько потоков, либо собирают несколько потоков процесса в один.
Бизнес процесс - это последовательность действий, которая должна привести к созданию продукта или услуги. И нотация BPMN служит для моделирования именно таких процессов. Но! Иногда проще понять принцип работы того или иного инструмента на простых примерах, которые не имеют отношения к бизнесу, но зато всем знакомы. Чем я и воспользуюсь в данной статье.
Виды шлюзов BPMN
5 основных шлюзов
![]() |
Исключающий шлюз (эксклюзивный, Exclusive Gateway), «или/или» - выбор только одного пути; |
![]() |
Параллельный шлюз (Parallel Gateway), «и» - выбор всех путей; |
![]() |
Неисключающий шлюз (неэсклюзивный, Inclusive Gateway), «и/или» - выбор одного или нескольких; |
![]() |
Событийный шлюз (Event Gateway) - выбор первого события, которое случится; |
![]() |
Сложный шлюз (Complex Gateway) – прочие варианты. |
2 дополнительных шлюза
Эти шлюзы используются как стартовые элементы.
![]() |
Эксклюзивный событийный шлюз (Exclusive Event-Based Gateway) - выбор одного из нескольких стартовых событий; |
![]() |
Параллельный событийный шлюз (Parallel Event-Based Gateway) - ожидание нескольких стартовых событий. |
Подробное описание шлюзов в BPMN с примерами
1. Шлюз «ИЛИ/ИЛИ» (исключающий, Exclusive Gateway)
Графически данный шлюз отображается 2 способами. Они равнозначные.
1.1 Расходящаяся развилка/шлюз или/или
На данном шлюзе можно выбрать только один путь, по которому процесс пойдет дальше.

Что такое токен? Представьте, что когда процесс начинается, то в стартовом событии появляется токен. Он будет путешествовать по процессу и показывать, где мы сейчас в нем находимся. Когда этот токен будет проходить через шлюзы, то в соответствии с заданными правилами, он будет выбирать, куда ему (или им, если количество токенов увеличится) нужно двигаться дальше. Подробнее см. видео [su_youtube url="https://www.youtube.com/watch?v=Gfx5atU3YDY&ab_channel=BPMN2ru"]

1.2 Сходящаяся развилка/шлюз «или/или»
Когда в сходящийся шлюз поступает токен, он пропускает дальше тоже только один токен.

1.3 Сходящийся и одновременно расходящийся шлюз «или/или»
Сразу отмечу, что крайне не рекомендуется использовать одни и те же шлюзы в BPMN для обоих действий (сведение и разведение потоков). Это затрудняет чтение схемы и в некоторых случаях может приводить к нарушениям в логике. Рассмотрим еще один пример, который проиллюстрирует эту проблему.


2. Шлюз «И» (параллельный, Parallel Gateway)
Графически данный шлюз отображается так
2.1 Расходящаяся развилка/шлюз «И» (на схеме ниже - шлюз №1)
На данном шлюзе процесс распараллеливается и идет одновременно по всем исходящим потокам. Другими словами, один токен, вошедший в такой шлюз порождает вместо себя столько токенов, сколько потоков управления выходят из шлюза. На картинке ниже этих токенов генерируется два.

2.3 Сходящаяся развилка/шлюз «И» (на схеме выше - шлюз №2)
Этот шлюз будет собирать токены, до тех пор, пока не соберет столько, сколько потоков в него входит. Затем данный шлюз сгенерирует один токен, который отправится дальше по процессу.
2.3 Сходящийся и одновременно расходящийся шлюз «и»
Если шлюз «и» является одновременно и собирающим, и разводящим потоки (что не рекомендуется делать по правилам хорошего стиля BPMN), то он будет действовать по сумме вышеописанных правил. Рассмотрим такой шлюз на приведенной ниже схеме "Постановка спектакля". Сначала шлюз №2 дождется пока в него поступит количество токенов, равное количеству входящих потоков - 3. Затем, когда поступят все 3, он запустит по двум исходящим потокам по одному токену.



3. Шлюз «и/или» (неисключающий, inclusive Gateway)
Графически данный шлюз отображается так
3.1 Расходящаяся развилка/шлюз «и/или»
На данном шлюзе процесс может пойти по одному (обязательно) или нескольким потокам управления.

3.2 Сходящаяся развилка/шлюз «и/или»
Особенностью данного шлюза является то, что он «знает» сколько токенов ему нужно получить на вход, чтобы запустить процесс дальше. Если на расходящемся шлюзе сгенерируется два токена, то сходящийся дождется двух токенов и затем сгенерирует один исходящий.
А если в пути один из токенов завершит свое «существование», то сходящийся шлюз «и/или» ждать его не будет.

4. Событийный шлюз (Event-Based Gateway)
Графически событийный шлюз отображается так

«Кто первый встал - того и тапки!»
Также на потоках, исходящих из этого шлюза, могут располагаться Задачи, принимающие сообщение. Важно помнить, что согласно нотации на одном событийном шлюзе нельзя одновременно использовать и события с месседжем (кружочки со значком конверта), и задачи с месседжем (прямоугольники с конвертом). Пример:

5. Эксклюзивный событийный шлюз (Exclusive Event-Based Gateway).
Этот шлюз используется как стартовый элемент. Он похож на обычный событийный шлюз, но выглядит немного иначе (с одинарной круговой линией)


6. Параллельный событийный шлюз (Parallel Event-Based Gateway)
Параллельный событийный шлюз выглядит так:
Когда в стартовом событии рождается токен, он всегда создает новый экземпляр процесса. И если стартовых событий несколько (или используется эксклюзивный событийный шлюз), то каждый раз, когда случается стартовое событие, создается новый экземпляр процесса. Можно провести такую аналогию: схема процесса - это класс, а экземпляр процесса - это конкретный объект класса. Или более бытовой пример: схема - это формочка для выпекания печенья, а экземпляры - сами печеньки :)
Параллельный событийный шлюз (или аналогичное стартовое событие) может пригодится в ситуации, когда нам надо в уже существующий экземпляр процесса «запустить» еще один токен, по другому событию. Например, необходимо передать документы курьеру, после того как их подготовят и после того как поступят деньги от клиента. То есть оба события должны наступить, но мы не знаем в каком порядке это случатся.


7. Сложный шлюз (Complex Gateway)
Еще один редко используемый в BPMN шлюз. Отображается он так:


Заключение
Для большинства процессов согласовательного уровня рекомендуется использовать 2-3 вида шлюзов («или/или»