Изменение заказа и outbox-запись фиксируются вместе; издатель передаёт событие брокеру, а потребитель сохраняет результат и отметку обработки одной транзакцией. Повторные события отсекаются по event_id.
Как данные проходят из сервиса через очередь в хранилище
Изменение заказа и outbox-запись фиксируются вместе; издатель передаёт событие брокеру, а потребитель сохраняет результат и отметку обработки одной транзакцией. Повторные события отсекаются по event_id.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сервис заказов публикует события о создании заказов. Другой сервис читает их из брокера и обновляет отчётную таблицу. Опишите движение данных и защиту от потерь и повторной обработки при сбоях.
Ответ
Изменение заказа и outbox-запись фиксируются вместе; издатель передаёт событие брокеру, а потребитель сохраняет результат и отметку обработки одной транзакцией. Повторные события отсекаются по event_id.
Событие содержит event_id, order_id, версию схемы и минимальные необходимые данные. Outbox-издатель может отправить событие повторно после неопределённого сетевого результата, поэтому доставка не заменяет идемпотентность.
Потребитель проверяет формат, в транзакции регистрирует уникальный event_id и обновляет отчётную таблицу. Подтверждение брокеру отправляется после commit. Если подтверждение потерялось, повтор распознаётся по ID и не меняет результат второй раз. Временные ошибки повторяют с задержкой; неисправимые сообщения изолируют с диагностикой без чувствительного payload.
Для изменений одного заказа может понадобиться версия события: дедупликация устраняет повторы, но сама по себе не решает проблему неправильного порядка.