Изменения документа Выполнение процесса
Редактировал(а) Alexandr Fokin 2024/06/12 15:27
<
отредактировано Alexandr Fokin
на 2024/01/11 13:27
на 2024/01/11 13:27
отредактировано Alexandr Fokin
на 2024/06/12 15:27
на 2024/06/12 15:27
Изменить комментарий:
Update document after refactoring.
Комментарий
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -А лгоритмы.Процессы.WebHome1 +Архитектура и модели.Модели.Процесс.WebHome - Содержимое
-
... ... @@ -1,3 +1,4 @@ 1 +|(% style="width:131px" %) |(% style="width:1307px" %)[[Блокировки>>doc:Архитектура и модели.Блокировки.WebHome]] 1 1 |(% style="width:131px" %)Типы этапов|(% style="width:1307px" %)((( 2 2 |(% style="width:204px" %)Автоматическая обработка|(% style="width:1084px" %) 3 3 |(% style="width:204px" %)Ожидание события|(% style="width:1084px" %)Сообщение от внешней системы. ... ... @@ -7,16 +7,17 @@ 7 7 ))) 8 8 |(% style="width:131px" %)Консистентность|(% style="width:1307px" %)((( 9 9 | |При обработке процесса важно гарантировать, что один и тот-же экземпляр процесса в один момент времени обрабатывается одним обработчиком. 10 -| | Обработчик при обработке содержит у себя актуальное состояние процесса, и никто другой не модифицирует его до окончания работы обработчика (если не предполагаем возможность оптимистичной блокировки с retry).11 +| |Гарантировать, что обработчик при обработке содержит у себя актуальное состояние процесса, и никто другой не модифицирует его до окончания работы обработчика (если не предполагаем возможность оптимистичной блокировки с retry). 11 11 | |((( 12 - Обработчик перед внесением изменений убедился, что процесс находится на нужном шаге.13 +Гарантировать, что обработчик перед внесением изменений убедился, что процесс находится на нужном шаге. 13 13 14 14 Ситуация 1. 15 -Нам поступило сообщение от внешней системы, по которому мы должный продолжить некоторый экземпляр процесса. Мы берем это экземпляр и перед обработкой проверяем его статус. Если вдруг обнаружилось, что статус некорректный, то это обозначает что возникла ошибка. 16 -Например это может быть вызвано задвоением при отправки сообщений от внешней системы, если при взаимодействии мы не используем подход с уникальной идентификацией сообщений. Ранее приходило первый экземпляр этого сообщения и процесс уже продолжил свое выполнение далее, но вот поступил второй экземпляр того-же сообщения, и мы фиксируем что процесс не находится в нужном состоянии для его обработки. При у нас есть возможность реализовать это таким образом, что мы не повредим консистентность процесса. 16 +Нам поступило сообщение от внешней системы, по которому мы должны продолжить некоторый экземпляр процесса. Мы берем это экземпляр и перед обработкой проверяем его статус. Если вдруг обнаружилось, что статус некорректный, то это обозначает что возникла ошибка. 17 +Например это может быть вызвано задвоением при отправки сообщений от внешней системы ([[Dual write problem>>doc:Архитектура и модели.Группа\. Распределенные системы.Распределенные системы\. Консистентность.Dual write problem.WebHome]]), если при взаимодействии мы не используем подход с уникальной идентификацией сообщений. Ранее приходил первый экземпляр этого сообщения и процесс уже продолжил свое выполнение далее, но вот поступил второй экземпляр того-же сообщения, и мы фиксируем что процесс не находится в нужном состоянии для его обработки. При этом у нас есть возможность реализовать это таким образом, что мы не повредим консистентность процесса. 18 +Момент с уникальной идентификацией заявок, также относиться и к инициализации процесса на основании события. 17 17 18 18 Ситуация 2. 19 -Два пользователя открыли форму ручного ввода данных для процесса. Первый пользователь указал данные и продолжил процесс. Второй пользователь пытается проделать то-же самое, но получает ошибку о том, что его форма устарела и кто-то другой внес изменений, на текущем этапе невозможно выполнить данный ручной ввод. 21 +Два пользователя открыли форму ручного ввода данных для процесса. Первый пользователь указал данные и продолжил процесс. Второй пользователь пытается проделать то-же самое, но получает ошибку о том, что его форма устарела и кто-то другой внес изменений, на текущем этапе невозможно выполнить данный ручной ввод 22 +(может быть обнаружено либо по RowVersion, либо по статусу процесса). 20 20 ))) 21 21 ))) 22 -|(% style="width:131px" %) |(% style="width:1307px" %)