Что такое Transactional Outbox?
Transactional Outbox — это архитектурный паттерн, который гарантирует надежную доставку сообщений в системах, где нужно сохранить данные в базе и отправить асинхронные уведомления.
❓Что делает паттерн?
✅ Гарантирует отправку сообщений только после успешной транзакции в базе данных
✅ Предотвращает потерю сообщений при неожиданных остановках системы
✅ Обрабатывает сетевые проблемы и недоступность брокеров сообщений
✅ Предотвращает состояния гонки в распределенных системах
Пример:
c#
// Сохранение заказа
var order = new Order { Id = orderId, Amount = amount, Status = «Placed» };
_context.Orders.Add(order);
// Сохранение сообщения в Outbox
var message = new OutboxMessage
{
Id = Guid.NewGuid(),
Type = nameof(OrderPlaced),
Payload = JsonSerializer.Serialize(new { OrderId = orderId, Amount = amount }),
CreatedAt = DateTime.UtcNow,
Processed = false
};
_context.OutboxMessages.Add(message);
await _context.SaveChangesAsync();
// Завершение транзакции
await transaction.CommitAsync();
