Перейти к содержанию

Идемпотентная обработка сообщений

Сервисы часто потребляют сообщения из других приложений или сервисов. Как описывалось в главе 3, при разработке потребителя сообщений важно убедиться в его идемпотентности, поскольку брокер может доставить сообщение более чем один раз.
Потребитель является идемпотентным, если его можно безопасно вызывать по нескольку раз с одним и тем же сообщением.

Идемпотентная обработка сообщений с хранилищем событий на основе реляционной БД

Можно применить подход, аналогичный описанному в шаблоне идемпотентный потребитель — записывать ID сообщения в таблицу PROCESSED_MESSAGES в рамках транзакции, которая добавляет события в таблицу EVENTS

Идемпотентная обработка сообщений с хранилищем событий на основе NoSQL

На время обработки сообщения потребитель хранит его идентификатор внутри генерируемых событий. Для обнаружения дубликатов он следит за тем, чтобы ни одно из событий агрегата не содержало ID сообщения.
Как следствие все сообщения должны порождать события, пусть даже это будет псевдособытие, не меняющее состояния агрегата и хранящее только ID сообщения.


Последнее обновление : 25 мая 2023 г.
Дата создания : 29 июля 2022 г.

Комментарии

Комментарии