Sobes.tech
Назад к вопросам
Middle+
1

Что такое Transactional Outbox паттерн?

Компании, где спрашивали
Magnit Tech

Ответ от нейросети

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, а отдельный воркер читает и отправляет события.