TGViewer
C# (C Sharp) programming C# (C Sharp) programming @csharp_ci · 18.1K subscribers
Post #1687 5.88K
⚡️ КАК СДЕЛАТЬ ИНТЕГРАЦИИ БЕЗ ПОТЕРИ ДАННЫХ

Вы регистрируете пользователя и сразу вызываете внешние сервисы:

- сохраняете пользователя в БД
- отправляете welcome-email
- публикуете событие в event bus


public async Task RegisterUserAsync(User user, CancellationToken token)
{
_userRepository.Insert(user);

await _unitOfWork.SaveChangesAsync(token);

await _emailService.SendWelcomeEmailAsync(user, token);
await _eventBus.PublishAsync(new UserRegisteredEvent(user.Id), token);
}

Вопрос
Что здесь может пойти не так?

Проблемы

— Пользователь сохранён, но email не отправился
— Email отправился, но событие не опубликовалось
— Событие ушло, а транзакция в БД откатилась
— При ретраях возможны дубли

Чем больше внешних вызовов, тем больше точек отказа и сложнее обработка ошибок.

Решение — Outbox Pattern

Сохраняем пользователя и событие в одной атомарной транзакции:


public async Task RegisterUserAsync(User user, CancellationToken token)
{
_userRepository.Insert(user);

_outbox.Insert(new UserRegisteredEvent(user.Id));

await _unitOfWork.SaveChangesAsync(token);
}


Дальше отдельный процесс:

• читает сообщения из Outbox
• отправляет email
• публикует события
• помечает как обработанные

Результат

— Нет рассинхронизации между БД и внешними сервисами
— Гарантированная доставка событий
— Возможность безопасных повторов
— Простая и надёжная архитектура для распределённых систем
More from @csharp_ci
  1. Sep 23, 2026🐞 Когда логов недостаточно: дамп памяти из C# Баг возникает только на проде, а локально в…
  2. Sep 21, 2026Awesome Jev - большая подборка инструментов для новой модели TypeSafe AI 🤗 Jev - новая бы…
  3. Sep 21, 2026🔍Тестовое собеседование с Senior C# разработчиком уже завтра 22 сентября(уже завтра!) в 1…
  4. Sep 20, 2026🧩 Задача на C#: почему воркер завис, хотя очередь почти пустая? Есть канал вместимостью о…
  5. Sep 18, 2026Post #1882
  6. Sep 17, 2026🔥 Microsoft выпустила .NET 11 RC1**- первый релиз-кандидат уже с **go-live support, то ес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →