Idempotent Consumer делает повторную обработку события безопасной. Для параллельных копий недостаточно сначала проверить наличие ID: уникальная отметка обработки и бизнес-изменение должны быть атомарны.
Опишите паттерн Idempotent Consumer. Как гарантировать корректность данных, если одно и то же событие пришло в систему параллельно?
Idempotent Consumer делает повторную обработку события безопасной. Для параллельных копий недостаточно сначала проверить наличие ID: уникальная отметка обработки и бизнес-изменение должны быть атомарны.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Idempotent Consumer делает повторную обработку события безопасной. Для параллельных копий недостаточно сначала проверить наличие ID: уникальная отметка обработки и бизнес-изменение должны быть атомарны.
В одной транзакции вставляют event ID в таблицу processed с уникальным ограничением и выполняют изменение. При конфликте событие уже обрабатывается или обработано; поведение определяют по результату транзакции, а не по предварительному SELECT. Ack отправляют после commit. Внешний HTTP-эффект не входит автоматически в эту транзакцию: нужен идемпотентный ключ у получателя или outbox и сверка. Срок хранения дедупликации должен покрывать допустимый replay.