Приведите пример паттерна Transactional Outbox.

При создании заказа запишите сам заказ и событие OrderCreated в outbox в одной транзакции БД. Отдельный процесс публикует сохранённое событие в брокер и отмечает его отправку.

Короткий ответ

Что ответить на собеседовании

При создании заказа запишите сам заказ и событие OrderCreated в outbox в одной транзакции БД. Отдельный процесс публикует сохранённое событие в брокер и отмечает его отправку.

Подробный разбор

Ответ с пояснениями

При создании заказа запишите сам заказ и событие OrderCreated в outbox в одной транзакции БД. Отдельный процесс публикует сохранённое событие в брокер и отмечает его отправку.

Если транзакция откатывается, нет ни заказа, ни события. Если процесс падает после commit, событие остаётся в outbox и будет отправлено позже. Если он падает после публикации до отметки, возможна повторная отправка.

Поэтому событию нужен стабильный ID, а потребителю — идемпотентная обработка или inbox. Не держите транзакцию создания заказа открытой на время обращения к брокеру. Несколько отправителей должны безопасно разделять задания; порядок событий по агрегату и очистка outbox проектируются отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее