Версия 1.16 от Alexandr Fokin на 2026/05/29 17:46

Последние авторы
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" %)(((
10 Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса.
11 От разработчика требуется реализация хендлера проверки условия.
12 )))
13 |(% style="width:232px" %)Wakeup lock (Wakeup state)|(% style="width:1151px" %)(((
14 Модуль wakeup lock добавляет отдельную таблицу для синхронизации.
15 Используется только в сочетании с Wakeup condition.
16
17 [[Гарантированная конкурентная доставка сигнала>>doc:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Гарантированная конкурентная доставка сигнала.WebHome]]
18 )))
19 )))
20 |Типы передачи сигналов|(((
21 | |(% style="width:662px" %)Тип|(% style="width:513px" %)Пример|Триггер|Избыточная задержка сигнала|Stream триггер|Wakeup condition|Wakeup lock
22 |1|(% style="width:662px" %)Низкая интенсивность сигналов, низкая конкуренция за процесс.|(% style="width:513px" %)(((
23 Линейный процесс отправил запрос и ждет 1 событие ответ.
24 Хендлер события пробуждает процесс напрямую.
25 )))|-|-|-|-|-
26 |2|(% style="width:662px" %)Высокая интенсивность сигналов, высокая конкуренция за процесс.
27 Сигнал нужно подавать через триггер.|(% style="width:513px" %) | | | | |
28 |2.1|(% style="width:662px" %)Несколько конкурирующих триггеров с cannot hold lock timeout.
29 Если не удалось получить блокировку процесса, то выполнение триггера откладывается на некоторый timeout.|(% style="width:513px" %)__Триггеры <-> Процесс.__|+|+|-|-|-
30 |2.2|(% style="width:662px" %)Один stream триггер.
31 Высокая частота сигналов, но низкая конкуренция (условие активации триггера наличие необработанного сигнала и остановка процесса).
32 Можно использовать без таблицы Wakeup lock.|(% style="width:513px" %)__Simple stream trigger <-> Процесс.__
33 \\Transactional outbox. См [[Примеры>>doc:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Примеры.WebHome]] 3.|+|-|+|+-|-
34 |2.2.1|(% style="width:662px" %)Каскад триггеров.
35 Подход, когда 1 корневой simple stream trigger передает сигнал на процесс.
36 А другие триггеры процесса передают сигнал не на процесс напрямую, а на stream триггер.
37 Данный подход позволяет использовать несколько триггеров (как в варианте 2.3), но при этом полностью убирает конкуренцию (не требует wakeup lock (и может работать без wakeup condition)).|(% style="width:513px" %)__Дочерние триггеры
38 <-> Корневой триггер (Simple stream trigger)
39 <-> Процесс__|+|-|+|+-|-
40 |2.3|(% style="width:662px" %)Несколько конкурирующих триггеров.
41 Высокая интенсивность сигналов, высокая конкуренция за процесс.
42 Для сглаживания конкуренции используется Wakeup lock (share блокировка минимизирует блокировку и сглаживает конкуренцию).|(% style="width:513px" %)__Триггеры <-> Процесс.__|+|-|-|+|+
43 |3|(% style="width:662px" %)Периодическая проверка|(% style="width:513px" %)Процесс пробуждается каждые N timeout, используется только 1 timer trigger. См. [[Примеры>>doc:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Примеры.WebHome]] 1 (блок 2).|+|+|-|-|-
44 )))
45 | |
46
47