Версия 1.5 от Alexandr Fokin на 2026/05/05 15:59

Последние авторы
1 | |
2 |Описание колонок|(((
3 |(% style="width:232px" %) |(% style="width:1151px" %)
4 |(% style="width:232px" %)Триггер|(% style="width:1151px" %)Используется ли триггер
5 |(% style="width:232px" %)Избыточная задержка сигнала|(% style="width:1151px" %)Свойство обозначающее, что процесс может получить сигнал (и продолжить обработку) позже чем мог бы (при использовании других подходов).
6 |(% style="width:232px" %)Stream триггер|(% style="width:1151px" %)Триггер, отслеживающий состояние процесса (выполняется он или нет).
7 Реализуется через отправку TriggerEvent в момент остановки выполнения процесса (делается автоматически если зарегистрирован).
8 Пробуждает процесс (передает сигнал), только после того как процесс остановил выполнение.
9 |(% style="width:232px" %)Wakeup condition|(% style="width:1151px" %)Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса.
10 От разработчика требуется реализация хендлера проверки условия.
11 |(% style="width:232px" %)Wakeup state|(% style="width:1151px" %)(((
12 Модуль wakeup state добавляет отдельную таблицу для синхронизации.
13 Используется только в сочетании с Wakeup condition.
14 Решает 2 задачи:
15 1) Информация о выполнении процесса считывается из Wakeup state (без взятия блокировки процесса). Если процесс выполняется, то сигнал считается доставленным и никаких обновлений не требуется.
16 2) Синхронизация проверки условия Wakeup condition, гарантия что сигнал не будет утерян.
17 В конце сессии обработки процесса Wakeup state блокируется и только после этого проверяется условие наличие новых сигналов Wakeup condition, это гарантирует что ни один поступивший сигнал не будет утерян.
18
19 Такой подход позволяет минимизировать ожидание на блокировках.
20 )))
21 )))
22 |Типы передачи сигналов|(((
23 | |(% style="width:662px" %)Тип|(% style="width:513px" %)Пример|Триггер|Избыточная задержка сигнала|Stream триггер|Wakeup condition|Wakeup state
24 |1|(% style="width:662px" %)Если внешний сигнал единичный и процесс гарантировано остановлен, то его можно подать сразу на процесс (без триггера).|(% style="width:513px" %)(((
25 Линейный процесс отправил запрос и ждет 1 событие ответ.
26 Хендлер события пробуждает процесс напрямую.
27 )))|-|-|-|-|-
28 |2|(% style="width:662px" %)Если внешний сигнал множественный или процесс может периодически запускаться, то сигнал нужно подавать через триггер.|(% style="width:513px" %) | | | | |
29 |2.1|(% style="width:662px" %)Несколько конкурирующих триггеров с cannot hold lock timeout.
30 Если не удалось получить блокировку процесса, то выполнение триггера откладывается на некоторый timeout.|(% style="width:513px" %) |+|+|-|-|-
31 |2.2|(% style="width:662px" %)Если используется один stream триггер, то можно обойтись без таблицы wakeup state entity.|(% style="width:513px" %)Transactional outbox.|+|-|+|+-|-
32 |2.3|(% style="width:662px" %)Несколько конкурирующих триггеров.|(% style="width:513px" %) |+|-|-|+|+
33 |3|(% style="width:662px" %)Периодическая проверка|(% style="width:513px" %)Процесс пробуждается каждые N timeout, используется только 1 timer trigger.|+|+|-|-|-
34 )))
35 | |
36
37