Назад к вопросам
Senior
4
Расскажите про паттерн Transactional Outbox: что это такое и как работает?
Компании, где спрашивали
А7
Ответ от нейросети
sobes.tech AI
Паттерн Transactional Outbox используется для надёжной интеграции между микросервисами, когда нужно гарантировать, что событие будет опубликовано только если транзакция с данными прошла успешно.
Идея в том, что при изменении данных в базе в рамках одной транзакции одновременно записывается сообщение (outbox) в специальную таблицу. После коммита транзакции отдельный процесс читает эти сообщения из таблицы и отправляет их в очередь или брокер сообщений.
Это решает проблему "двухфазной коммита" между базой и системой сообщений, обеспечивая атомарность и согласованность.
Пример на Go (упрощённо):
// В рамках транзакции
tx, _ := db.Begin()
// Обновляем данные
_, err := tx.Exec("UPDATE orders SET status = ? WHERE id = ?", "processed", orderID)
// Записываем событие в outbox
_, err = tx.Exec("INSERT INTO outbox (event_type, payload) VALUES (?, ?)", "OrderProcessed", eventPayload)
// Коммит транзакции
err = tx.Commit()
// Отдельный воркер читает из outbox и публикует события