Сообщения между сервисами
Transactional outbox — это способ гарантированной доставки сообщений между сервисами. Он сохраняет сообщение в БД в рамках бизнес-транзакции, а затем отправляет его асинхронно.
Проблема: бизнес-операция (например, создание заказа) и отправка события в брокер (Kafka, RabbitMQ) не атомарны. Возможен сбой между db.Commit() и kafka.Send().
Transactional outbox решает эту проблему:
В рамках транзакции сохраняются и бизнес-данные, и сообщение в таблицу outbox.
Отдельный воркер читает outbox и отправляет сообщение в брокер.
После успешной отправки сообщение помечается как обработанное или удаляется.
Этот паттерн повышает надёжность и устраняет рассинхрон между базой и брокером.
Уровень
Рейтинг:
5
Сложность:
7
Навыки
Golang
Postgres
Kafka
Ключевые слова
Подпишись на Golang Developer в телеграм