Ответ вслух Middle Асинхронные интеграции и брокеры обновлено

Кейс: начисление бонусов по событиям

Вопрос

Программа лояльности должна начислять 5% бонусов за каждый доставленный заказ. Сервис заказов публикует события в Kafka. Опиши требования к интеграции.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Слушаю событие OrderDelivered из топика заказов, ключ orderid. В событии нужны id заказа и клиента, сумма к начислению без доставки и время.

Что должно прозвучать в ответе

  • Какое событие слушаем: OrderDelivered, его поля и источник

  • Идемпотентность: один заказ, одно начисление, хранение обработанных

  • Возвраты: событие о возврате и списание бонусов

  • Порядок и задержки: ключ order_id, что если возврат пришёл раньше доставки

  • Ошибки: повторы, DLQ, сверка начислений с заказами

Что могут спросить следом

  • Как проверить, что ни одно начисление не потеряно?
  • Что делать, если правило процента поменяется?

Разбор

Слушаю событие OrderDelivered из топика заказов, ключ order_id. В событии нужны id заказа и клиента, сумма к начислению без доставки и время. Начисление идемпотентно: уникальный ключ на заказ в таблице начислений, повтор события ничего не добавит. Процент беру из правила, действующего на дату доставки, и сохраняю в начислении. Для возвратов отдельное событие OrderReturned и списание бонусов пропорционально. Если возврат пришёл раньше доставки из-за задержки, событие откладываю и обрабатываю после. Ошибки: ограниченные повторы и DLQ. Раз в сутки сверка: все доставленные заказы за день против начислений, расхождения в отчёт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.