Outbox сохраняет бизнес-изменение и запись события в одной транзакции БД. Отдельный relay публикует только подтверждённые outbox-записи, поэтому rollback не оставляет событие для отправки.
Каким образом паттерн Outbox Pattern помогает гарантировать, что событие в брокер сообщений RabbitMQ уйдет только в том случае, если транзакция в реляционной БД завершилась успешно?
Outbox сохраняет бизнес-изменение и запись события в одной транзакции БД. Отдельный relay публикует только подтверждённые outbox-записи, поэтому rollback не оставляет событие для отправки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Outbox сохраняет бизнес-изменение и запись события в одной транзакции БД. Отдельный relay публикует только подтверждённые outbox-записи, поэтому rollback не оставляет событие для отправки.
После подтверждения брокера relay отмечает доставку. Между публикацией и этой отметкой возможен сбой, поэтому повторная доставка допустима и consumer должен быть идемпотентным. Publisher confirms подтверждают приём брокером, а не бизнес-обработку. Outbox устраняет опасную двойную запись «БД плюс брокер», но сам по себе не обеспечивает exactly-once эффект.