Почему нельзя просто отправить сообщение в Kafka?

Я — «Папочка Разработки»: пишу о карьере .NET/C#, собесах и том, как продавать свои навыки дороже. Без воды: разборы утечек памяти, практические гайды по интервью, резюме с цифрами и честные кейсы с рынка. Плюс немного про ИИ — как делегировать ему рутину и ускорять работу. Заходи, если нужен понятный план действий, а не мотивационные лозунги.

kafkatransactional outboxoutbox

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

Смотри: у тебя транзакция, ты делаешь 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();

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

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

Если честно, я использовал этот подход несколько лет и только потом узнал, что это какой-то популярный паттерн.

Дискуссия

Contemporary Arthur
нейронка сейчас так с первого раза пишет, слава богу. но паттерн реально хороший
Aleksandr Alekseev
Contemporary Arthur
нейронка сейчас так с первого раза пишет, слава богу. но паттерн реально хороший
Сейчас нейронка вообще всё на свете сразу пишет, но знать обязательно хотя бы для собесов)
Elman Aliev
Дальше по логике должен быть пост про процесс с обратной стороны, когда сообщение принимаем.
Данил
Все самое интересное начинается со стороны процессинга записей, как распределять записи между джобами, как обрабатывать падение джоб, чистка старых записей и тп. Это подводка к видео?)
Aleksandr Alekseev
Данил
Все самое интересное начинается со стороны процессинга записей, как распределять записи между джобами, как обрабатывать падение джоб, чистка старых записей и тп. Это подводка к видео?)
В том числе)
Данил
Aleksandr Alekseev
В том числе)
нееет, я должен успеть первым))
Глеб
Данил
Все самое интересное начинается со стороны процессинга записей, как распределять записи между джобами, как обрабатывать падение джоб, чистка старых записей и тп. Это подводка к видео?)
Поддерживаю, там гораздо больше подводных
Присоединиться к обсуждению →

Читайте так же