Что такое Transactional Outbox паттерн?
Ответ от нейросети
sobes.tech AI
Transactional Outbox — это паттерн интеграции, который помогает гарантировать надежную доставку сообщений между микросервисами или системами, избегая проблем с согласованностью данных.
Идея в том, что при выполнении бизнес-операции в базе данных вместе с изменениями сохраняется специальная таблица (outbox), куда записываются события или сообщения, которые нужно отправить. Вся эта операция происходит в одной транзакции, что гарантирует атомарность.
Отдельный процесс или сервис периодически читает из таблицы outbox новые сообщения и отправляет их в систему обмена сообщениями (например, Kafka, RabbitMQ). После успешной отправки сообщение помечается как обработанное.
Таким образом, достигается надежная доставка сообщений без риска потерять события из-за сбоев между записью в базу и отправкой сообщения.
Пример упрощённой структуры таблицы outbox:
CREATE TABLE outbox (
id SERIAL PRIMARY KEY,
aggregate_id UUID,
event_type VARCHAR(255),
payload JSONB,
processed BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW()
);
В коде при выполнении бизнес-логики в транзакции добавляется запись в outbox, а отдельный воркер читает и отправляет события.