Код-ревью Senior Асинхронные интеграции и брокеры обновлено

Ревью контракта события

Вопрос

Аналитик описал событие для интеграции заказов со складом. Найди проблемы.

Событие: UpdateOrder
Топик: orders, ключ: случайный UUID
Публикуется: перед сохранением заказа в БД
Гарантия: exactly once, поэтому дубли не обрабатываем
Поля: orderId, status, customerFullName, customerPassport, items
Версия схемы: не указывается
Ошибки обработки: повторять до успеха

Коротко

Исправленный контракт: OrderCreated, ключ orderid, публикация через outbox, at least once и идемпотентный потребитель по eventid, только нужные складу поля, версия схемы в Schema Registry, ограниченные повторы с задержкой и DLQ.

Что должен найти ревьюер

  1. Стильстрока 1
    Имя как команда и без смысла: событие называют фактом в прошедшем времени (OrderCreated, OrderPaid)
  2. Ошибкастрока 2
    Случайный ключ разбросает события одного заказа по партициям: порядок для заказа потеряется, нужен ключ order_id
  3. Ошибкастрока 3
    Публикация до сохранения: событие уйдёт, а транзакция может откатиться; нужен outbox после коммита
  4. Ошибкастрока 4
    Полагаться на exactly once нельзя: потребитель должен быть идемпотентным
  5. Безопасностьстрока 5
    Складу не нужны ФИО и паспорт: лишние персональные данные в событии
  6. Ошибкастрока 6
    Нет версии схемы: любое изменение полей сломает потребителей
  7. Ошибкастрока 7
    Бесконечные повторы блокируют поток: ограничить попытки и использовать DLQ

Разбор

Исправленный контракт: OrderCreated, ключ order_id, публикация через outbox, at least once и идемпотентный потребитель по event_id, только нужные складу поля, версия схемы в Schema Registry, ограниченные повторы с задержкой и DLQ.

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

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