Sobes.tech
Back to questions
Senior
6

Расскажи про Outbox Pattern — как он работает?

Companies where asked
Штрафов нет

Answer from AI

sobes.tech AI

Outbox Pattern — это паттерн для обеспечения надежной доставки сообщений между сервисами в распределенной системе, особенно когда нужно гарантировать согласованность между базой данных и системой обмена сообщениями.

Как он работает:

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

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

Пример упрощенной схемы:

// В транзакции
tx.Exec("UPDATE orders SET status = ? WHERE id = ?", newStatus, orderId)
tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)", "OrderUpdated", payloadJson)
// commit tx

// В отдельном воркере
for {
  events := db.Query("SELECT * FROM outbox WHERE sent = false")
  for _, event := range events {
    sendToMessageBroker(event)
    markAsSent(event.id)
  }
  time.Sleep(pollInterval)
}