Событийный шлюз (Event-based Gateway)
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Событийный шлюз позволяет принимать решение на основе событий. Каждый исходящий поток управления (sequence flow) такого шлюза должен быть соединён с промежуточным перехватывающим событием (intermediate catching event). Когда выполнение процесса достигает событийного шлюза, он ведёт себя как состояние ожидания: выполнение приостанавливается. Дополнительно для каждого исходящего потока управления создаётся подписка на событие.
Обратите внимание, что потоки управления, выходящие из событийного шлюза, отличаются от обычных потоков управления. Эти потоки никогда фактически не «выполняются». Напротив, они используются движком процесса для определения того, на какие события должно подписаться выполнение, достигшее событийного шлюза. Применяются следующие ограничения:
-
Событийный шлюз должен иметь два или более исходящих потоков управления.
-
За событийным шлюзом могут следовать только элементы типа
intermediateCatchEvent. (Задачи получения сообщений — Receive Task — после событийного шлюза пока не поддерживаются движком.) -
Промежуточное перехватывающее событие, соединённое с событийным шлюзом, должно иметь ровно один входящий поток управления.
Следующий процесс является примером процесса с событийным шлюзом. Когда выполнение достигает событийного шлюза, выполнение процесса приостанавливается. Кроме того, экземпляр процесса подписывается на сигнальное событие alert и создаёт таймер, который срабатывает через 10 минут. Фактически это заставляет движок процесса ожидать сигнальное событие в течение десяти минут. Если сигнальное событие происходит в течение этих 10 минут, таймер отменяется, и выполнение продолжается после сигнального события. Если сигнал не был отправлен, выполнение продолжается после таймера, а подписка на сигнал отменяется.
Соответствующий XML выглядит следующим образом:
<definitions>
<signal id="alertSignal" name="alert" />
<process id="catchSignal">
<startEvent id="start" />
<sequenceFlow sourceRef="start" targetRef="gw1" />
<eventBasedGateway id="gw1" />
<sequenceFlow sourceRef="gw1" targetRef="signalEvent" />
<sequenceFlow sourceRef="gw1" targetRef="timerEvent" />
<intermediateCatchEvent id="signalEvent" name="Alert">
<signalEventDefinition signalRef="alertSignal" />
</intermediateCatchEvent>
<intermediateCatchEvent id="timerEvent" name="Alert">
<timerEventDefinition>
<timeDuration>PT10M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
<sequenceFlow sourceRef="timerEvent" targetRef="exGw1" />
<sequenceFlow sourceRef="signalEvent" targetRef="task" />
<userTask id="task" name="Handle alert"/>
<exclusiveGateway id="exGw1" />
<sequenceFlow sourceRef="task" targetRef="exGw1" />
<sequenceFlow sourceRef="exGw1" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
Расширения OpenBPM Engine
Атрибуты |
|
Элементы расширений |
|
Ограничения |
Атрибут |
Дополнительные ресурсы
-
Событийные шлюзы: http://camunda.org/bpmn/reference.html#gateways-event-based-gateways в справочнике по моделированию BPMN 2.0
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org