Sobes.tech
Back to questions
Senior
3

Расскажите про паттерн Transactional Outbox: что это такое и как работает?

Companies where asked
А7

Answer from AI

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 и публикует события