Сначала подтвердите регистрацию, затем создавайте активный заказ по надёжному событию. Если заказ нужен раньше, храните его как черновик и активируйте только после успешной регистрации.
Есть два сервиса — регистрация и управление заказами. Новый пользователь создаёт заказ и сразу регистрируется. Как увязать эти события, чтобы заказ не создавался если регистрация не удалась?
Сначала подтвердите регистрацию, затем создавайте активный заказ по надёжному событию. Если заказ нужен раньше, храните его как черновик и активируйте только после успешной регистрации.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала подтвердите регистрацию, затем создавайте активный заказ по надёжному событию. Если заказ нужен раньше, храните его как черновик и активируйте только после успешной регистрации.
Зафиксируйте пользователя и outbox-событие в одной локальной транзакции, а сервис заказов пусть обрабатывает событие идемпотентно по стабильному идентификатору. При временном сбое доставку можно повторить без дубликатов. Для предварительных резервов используйте состояние ожидания и компенсирующее освобождение при отказе. Обычная транзакция одной БД не делает две независимые службы атомарными; важно явно определить, какие промежуточные состояния видимы пользователю.