Исходный код вики Выполнение процесса
Версия 1.4 от Alexandr Fokin на 2024/01/11 13:28
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | |(% style="width:131px" %)Типы этапов|(% style="width:1307px" %)((( |
| 2 | |(% style="width:204px" %)Автоматическая обработка|(% style="width:1084px" %) | ||
| 3 | |(% style="width:204px" %)Ожидание события|(% style="width:1084px" %)Сообщение от внешней системы. | ||
| 4 | Ручной ввод от пользователя. | ||
| 5 | Ожидание некой даты. | ||
| 6 | И др. | ||
| 7 | ))) | ||
| 8 | |(% style="width:131px" %)Консистентность|(% style="width:1307px" %)((( | ||
| 9 | | |При обработке процесса важно гарантировать, что один и тот-же экземпляр процесса в один момент времени обрабатывается одним обработчиком. | ||
| |
1.2 | 10 | | |Обработчик при обработке содержит у себя актуальное состояние процесса, и никто другой не модифицирует его до окончания работы обработчика (если не предполагаем возможность оптимистичной блокировки с retry). |
| |
1.1 | 11 | | |((( |
| |
1.2 | 12 | Обработчик перед внесением изменений убедился, что процесс находится на нужном шаге. |
| |
1.1 | 13 | |
| 14 | Ситуация 1. | ||
| |
1.4 | 15 | Нам поступило сообщение от внешней системы, по которому мы должны продолжить некоторый экземпляр процесса. Мы берем это экземпляр и перед обработкой проверяем его статус. Если вдруг обнаружилось, что статус некорректный, то это обозначает что возникла ошибка. |
| |
1.1 | 16 | Например это может быть вызвано задвоением при отправки сообщений от внешней системы, если при взаимодействии мы не используем подход с уникальной идентификацией сообщений. Ранее приходило первый экземпляр этого сообщения и процесс уже продолжил свое выполнение далее, но вот поступил второй экземпляр того-же сообщения, и мы фиксируем что процесс не находится в нужном состоянии для его обработки. При у нас есть возможность реализовать это таким образом, что мы не повредим консистентность процесса. |
| 17 | |||
| 18 | Ситуация 2. | ||
| 19 | Два пользователя открыли форму ручного ввода данных для процесса. Первый пользователь указал данные и продолжил процесс. Второй пользователь пытается проделать то-же самое, но получает ошибку о том, что его форма устарела и кто-то другой внес изменений, на текущем этапе невозможно выполнить данный ручной ввод. | ||
| 20 | ))) | ||
| 21 | ))) |