Исходный код вики Выполнение процесса
Версия 1.4 от Alexandr Fokin на 2024/01/11 13:28
Последние авторы
author | version | line-number | content |
---|---|---|---|
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 | | |При обработке процесса важно гарантировать, что один и тот-же экземпляр процесса в один момент времени обрабатывается одним обработчиком. | ||
10 | | |Обработчик при обработке содержит у себя актуальное состояние процесса, и никто другой не модифицирует его до окончания работы обработчика (если не предполагаем возможность оптимистичной блокировки с retry). | ||
11 | | |((( | ||
12 | Обработчик перед внесением изменений убедился, что процесс находится на нужном шаге. | ||
13 | |||
14 | Ситуация 1. | ||
15 | Нам поступило сообщение от внешней системы, по которому мы должны продолжить некоторый экземпляр процесса. Мы берем это экземпляр и перед обработкой проверяем его статус. Если вдруг обнаружилось, что статус некорректный, то это обозначает что возникла ошибка. | ||
16 | Например это может быть вызвано задвоением при отправки сообщений от внешней системы, если при взаимодействии мы не используем подход с уникальной идентификацией сообщений. Ранее приходило первый экземпляр этого сообщения и процесс уже продолжил свое выполнение далее, но вот поступил второй экземпляр того-же сообщения, и мы фиксируем что процесс не находится в нужном состоянии для его обработки. При у нас есть возможность реализовать это таким образом, что мы не повредим консистентность процесса. | ||
17 | |||
18 | Ситуация 2. | ||
19 | Два пользователя открыли форму ручного ввода данных для процесса. Первый пользователь указал данные и продолжил процесс. Второй пользователь пытается проделать то-же самое, но получает ошибку о том, что его форма устарела и кто-то другой внес изменений, на текущем этапе невозможно выполнить данный ручной ввод. | ||
20 | ))) | ||
21 | ))) |