У меня есть конечная точка REST, которая называется CancelOrder
.Он состоит из четырех шагов (по порядку):
- Отмена выполнения (Вызывает нисходящую услугу).
- Отмена предложения (Вызывает нисходящую услугу).
- Обновлениесостояние заказа
cancelled
(в нашей локальной базе данных).
Это операция PUT
, и поэтому я пытаюсь сделать ее идемпотентной и отказоустойчивой.
Сценарий 1:
Всего один вызов :
Отмена выполнения, отмена предложения, обновление состояния.Все хорошо.
Вызов находится на полпути, когда получен другой вызов.Предположим, что пессимистическая блокировка отсутствует :
Состояние заказа еще не было изменено на «отменено» предыдущим вызовом, но выполнение было отменено.Теперь, когда второй вызов попытался отменить выполнение, он возвращает ошибку.
Идеальный способ справиться с описанным выше сценарием - сделать API-интерфейс транзакционным, установив блокировку записи в документе при каждом вызове.Но я не хочу этого делать.
Как мне справиться с этим сценарием?