TGViewer
Папочка Разработки Папочка Разработки @dotnetdad · 3.03K subscribers
Post #341 2.68K
Почему нельзя просто отправить сообщение в Kafka?

Не, конечно, можно. Если тебе плевать на консистентность.

Смотри: у тебя транзакция, ты делаешь Save() и потом Publish(). А между ними — пропасть, в которую может упасть что угодно: сеть, брокер, твой сервис. 🥣

Transactional Outbox — это когда вместо Publish() ты делаешь ещё один Insert() в таблицу outbox. В той же транзакции. Атомарно.
using var transaction = await _db.BeginTransactionAsync();

_db.Orders.Add(order);
_db.Outbox.Add(new OutboxMessage(order)); // Вместо _kafka.Publish()

await _db.SaveChangesAsync();
await transaction.CommitAsync();

А потом фоновый процесс читает эту таблицу и рассылает.

Это как записка на холодильник: ты не покупаешь бананы прямо сейчас, а пишешь "купить бананы" и точно не забудешь.

Если честно, я использовал этот подход несколько лет и только потом узнал, что это какой-то популярный паттерн.
  • 👍 8
  • ❤ 2
  • 🤔 1
  • 💯 1
More from @dotnetdad
  1. Sep 15, 2026За что отвечает ключевое слово async? У каждого спрашивали на собеседовании про модификато…
  2. Sep 14, 2026Post #394
  3. Sep 4, 2026Специальность + популяризация + высокий доход = темка 🌟 Разработка из серьёзной специализ…
  4. Aug 24, 2026Старшая дочка очень любит смотреть мультики, но этот грёбаный пульт всегда её подставляет…
  5. Aug 20, 2026Post #391
  6. Aug 3, 2026Разработчик, который не перестроится под нейронки, никуда не денется. Он станет таксистом…
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 →