Оплата не прошла, а товар на складе так и остался зарезервирован
Оформление заказа: сервис заказов создаёт заказ, сервис склада резервирует товар, сервис оплаты списывает деньги. У каждого сервиса своя база. Оплата отклонилась, заказ помечен как неудачный, но резерв на складе висит, и товар не могут купить другие.
Как правильно устроить такой процесс?
- Сага: у каждого шага есть компенсирующее действие, его запускают при сбое
- Обернуть все три вызова в одну транзакцию базы данных сервиса заказов
- Сначала списывать деньги, потом резервировать — тогда откатывать нечего
- Резерв на складе не нужен: проверять наличие в момент оплаты
