Надёжная схема: сохранить чек и outbox-событие в одной транзакции, доставить его через RabbitMQ, а REST-проверку выполнять с ограниченными повторами и идемпотентностью.
Как интегрировали внешний сервис проверки чеков через REST API с Circuit Breaker и RabbitMQ, чтобы исключить потерю данных при сбоях?
Надёжная схема: сохранить чек и outbox-событие в одной транзакции, доставить его через RabbitMQ, а REST-проверку выполнять с ограниченными повторами и идемпотентностью.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Надёжная схема: сохранить чек и outbox-событие в одной транзакции, доставить его через RabbitMQ, а REST-проверку выполнять с ограниченными повторами и идемпотентностью.
Circuit Breaker временно прекращает обращения к неработающему внешнему сервису, но не хранит задания. За сохранность отвечает БД и корректная доставка: durable-очередь, подтверждения публикации и подтверждение обработки после фиксации результата. Timeout внешнего вызова не доказывает, что операция не выполнена, поэтому нужен ключ идемпотентности или проверка статуса по идентификатору чека. Неисправимые задания сохраняют для разбора, а не бесконечно повторяют. На собеседовании описывайте эту схему как вариант решения, если фактически использовали другую архитектуру.