Изменения документа Движок cccc1808. ProcessEngine

Редактировал(а) Alexandr Fokin 2026/04/27 13:28

От версии 1.6
отредактировано Alexandr Fokin
на 2026/04/10 14:26
Изменить комментарий: К данной версии нет комментариев
К версии 1.8
отредактировано Alexandr Fokin
на 2026/04/10 14:31
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -17,6 +17,14 @@
17 17  |(% style="width:159px" %)БД провайдер|(% style="width:1168px" %)(((
18 18  * Сейчас есть реализация под EntityFramework.
19 19  * Но модель позволяет сделать реализацию под другие решения (LinqToDb или чистый Ado.Net).
20 +
21 +Для текущей реализации в качестве хранилище может выступать БД, поддерживающая:
22 +
23 +* транзакции
24 +* savepoint (если используются)
25 +* updatelock
26 +* updatelock skip locked
27 +* sharelock (можно обойтись без него)
20 20  )))
21 21  |(% style="width:159px" %)Передача сигналов для процессов через систему триггеров.|(% style="width:1168px" %)(((
22 22  В том числе для передачи сигналов реализована система триггеров.
... ... @@ -43,7 +43,7 @@
43 43  )))
44 44  |(% style="width:870px" %)TriggerEvent публикуются без использования TransactionOutbox напрямую в брокер после коммита транзакции (иначе мы бы нагружали БД).
45 45  |(% style="width:870px" %)(((
46 -Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений.
54 +Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений).
47 47  
48 48  Для таких случаев создается страхующий триггер (1 общий на тип процесса). Этот триггер запускается периодически и проходится по всем ожидающим процессам, проверяя условие (в реализации можно использовать keyset пагинацию) (в реализации можно использовать join для проверки условия).
49 49  Этот триггер выполняется периодически с более крупной временной задержкой. В случае обнаружения потери TriggerEvent, он поднимет заклинивший родительский процесс и он будет обработан (но позже). Можно установить этому триггеру низкий приоритет.