Sobes.tech
Назад к вопросам
Senior
11

Что из себя представляет Outbox-паттерн? Как его реализуют?

Компании, где спрашивали
СБК ПАРУС

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

sobes.tech AI

Outbox-паттерн — это архитектурный подход для надёжной передачи сообщений между сервисами или компонентами, особенно в распределённых системах. Он решает проблему согласованности между записью данных в базу и отправкой сообщений (например, событий) в очередь.

Идея:

  • Вместо прямой отправки сообщения в момент изменения данных, сервис записывает событие в специальную таблицу "outbox" в той же транзакции, что и основное изменение данных.
  • Отдельный процесс или сервис периодически читает эту таблицу и отправляет сообщения в брокер (Kafka, RabbitMQ и т.п.).
  • После успешной отправки сообщение помечается как отправленное или удаляется из таблицы.

Так достигается атомарность: либо данные и событие записаны вместе, либо не записаны вовсе, исключая рассинхронизацию.

Реализация:

  1. Добавить в базу таблицу outbox с полями: id, payload (событие), status, timestamp.
  2. В коде бизнес-логики в рамках одной транзакции:
    • Обновить основные данные
    • Записать событие в outbox
  3. Запустить отдельный воркер, который:
    • Периодически выбирает неотправленные события из outbox
    • Отправляет их в систему обмена сообщениями
    • Обновляет статус событий в outbox

Пример таблицы outbox:

CREATE TABLE outbox (
  id UUID PRIMARY KEY,
  event_type VARCHAR(255),
  payload TEXT,
  status VARCHAR(20),
  created_at TIMESTAMP
);

Outbox-паттерн повышает надёжность интеграции и упрощает обработку ошибок в распределённых системах.