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

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

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

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -17,14 +17,6 @@
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 (можно обойтись без него)
28 28  )))
29 29  |(% style="width:159px" %)Передача сигналов для процессов через систему триггеров.|(% style="width:1168px" %)(((
30 30  В том числе для передачи сигналов реализована система триггеров.
... ... @@ -51,7 +51,7 @@
51 51  )))
52 52  |(% style="width:870px" %)TriggerEvent публикуются без использования TransactionOutbox напрямую в брокер после коммита транзакции (иначе мы бы нагружали БД).
53 53  |(% style="width:870px" %)(((
54 -Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений).
46 +Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений.
55 55  
56 56  Для таких случаев создается страхующий триггер (1 общий на тип процесса). Этот триггер запускается периодически и проходится по всем ожидающим процессам, проверяя условие (в реализации можно использовать keyset пагинацию) (в реализации можно использовать join для проверки условия).
57 57  Этот триггер выполняется периодически с более крупной временной задержкой. В случае обнаружения потери TriggerEvent, он поднимет заклинивший родительский процесс и он будет обработан (но позже). Можно установить этому триггеру низкий приоритет.