Перейти к содержимому
SBER 299,88 ₽ 0,02% рост за прошлую сессиюIMOEX 2 514,85 0,14% рост за прошлую сессию
·Технологии·источник: Habr·1 мин

Возможно, Transactional Outbox не так уж и прост?

Я написал transactional outbox для двух своих коммерческих проектов. Подходящих готовых решений на момент написания не было, а CDC на основе лога с Debezium показался слишком тяжёлым для простого требования: сохранить событие вместе с данными и отправить его позже.

Само требование появляется потому, что сервис, который меняет базу и затем публикует сообщение, пишет в две системы, а транзакция базы данных покрывает только одну из них. Если процесс умирает между коммитом и публикацией, данные изменились, а никто об этом не узнал. Поменяйте порядок местами - и сообщение уйдёт об изменении, которого не случилось.

Паттерн outbox закрывает эту дыру тем, что делает событие частью транзакции. Вместо того чтобы публиковать прямо в брокер, сервис записывает событие в таблицу рядом с бизнесданными, а доставляет его отдельный шаг, позже.

Отрывок из ленты источникаЧитать у источника: Habr