Senior
Erzählen Sie uns vom Pattern Transactional Outbox: Was ist das und wie funktioniert es?
sobes.tech KI
Antwort von 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 и публикует события