Код-ревью Senior Асинхронные интеграции и брокеры обновлено
Ревью контракта события
Вопрос
Аналитик описал событие для интеграции заказов со складом. Найди проблемы.
Событие: UpdateOrder
Топик: orders, ключ: случайный UUID
Публикуется: перед сохранением заказа в БД
Гарантия: exactly once, поэтому дубли не обрабатываем
Поля: orderId, status, customerFullName, customerPassport, items
Версия схемы: не указывается
Ошибки обработки: повторять до успеха
Коротко
Исправленный контракт: OrderCreated, ключ orderid, публикация через outbox, at least once и идемпотентный потребитель по eventid, только нужные складу поля, версия схемы в Schema Registry, ограниченные повторы с задержкой и DLQ.
Что должен найти ревьюер
- Стильстрока 1Имя как команда и без смысла: событие называют фактом в прошедшем времени (OrderCreated, OrderPaid)
- Ошибкастрока 2Случайный ключ разбросает события одного заказа по партициям: порядок для заказа потеряется, нужен ключ order_id
- Ошибкастрока 3Публикация до сохранения: событие уйдёт, а транзакция может откатиться; нужен outbox после коммита
- Ошибкастрока 4Полагаться на exactly once нельзя: потребитель должен быть идемпотентным
- Безопасностьстрока 5Складу не нужны ФИО и паспорт: лишние персональные данные в событии
- Ошибкастрока 6Нет версии схемы: любое изменение полей сломает потребителей
- Ошибкастрока 7Бесконечные повторы блокируют поток: ограничить попытки и использовать DLQ
Разбор
Исправленный контракт: OrderCreated, ключ order_id, публикация через outbox, at least once и идемпотентный потребитель по event_id, только нужные складу поля, версия схемы в Schema Registry, ограниченные повторы с задержкой и DLQ.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.