Back to questions
Middle — Middle+
63
Можете объяснить концепцию паттерна Transactional Outbox и его применение?
Answer from AI
sobes.tech AI
Паттерн Transactional Outbox используется для решения проблемы атомарности между записью в базу данных и отправкой сообщений (например, в очередь или событие) в распределённых системах. Основная идея — вместо прямой отправки сообщения в рамках транзакции, сохранять событие в специальной таблице (outbox) в той же транзакции, что и бизнес-данные. Затем отдельный процесс или сервис асинхронно читает эти события из таблицы и отправляет их в очередь или брокер сообщений.
Это гарантирует, что данные и события не рассинхронизируются, т.к. запись в outbox и бизнес-операция происходят атомарно.
Пример:
// В рамках транзакции сохраняем данные и событие в outbox
using var transaction = dbContext.Database.BeginTransaction();
// Сохраняем бизнес-объект
dbContext.Orders.Add(order);
// Добавляем событие в outbox
dbContext.OutboxEvents.Add(new OutboxEvent {
EventType = "OrderCreated",
Payload = JsonSerializer.Serialize(order),
CreatedAt = DateTime.UtcNow
});
await dbContext.SaveChangesAsync();
transaction.Commit();
// Отдельный сервис читает из OutboxEvents и публикует в очередь