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

Ты много говорил про Inbox pattern. Про Outbox что-нибудь знаешь?

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

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

sobes.tech AI

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

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

Преимущества:

  • Гарантируется, что событие не потеряется и не будет отправлено без соответствующего изменения данных.
  • Обеспечивается атомарность операции изменения данных и публикации события.
  • Упрощается обработка сбоев и повторная отправка.

Пример:

// В транзакции записываем заказ и событие в outbox
tx, _ := db.Begin()
_, _ = tx.Exec("INSERT INTO orders ...")
_, _ = tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)", "OrderCreated", orderPayload)
tx.Commit()

// Отдельный воркер читает из outbox и отправляет события
for {
  events := fetchOutboxEvents()
  for _, e := range events {
    sendToMessageBus(e)
    markEventAsSent(e)
  }
  time.Sleep(time.Second)
}

Таким образом, Outbox pattern помогает надежно интегрировать микросервисы и системы, избегая рассинхронизации данных и сообщений.