Sobes.tech
Senior

Pastāstiet par Transactional Outbox paraugu: kas tas ir un kā tas darbojas?

sobes.tech AI

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