MassTransit и абстракции над брокерами
↑ 5.4 Очереди и брокеры: Kafka, RabbitMQ · ← Предыдущая · → Следующая
Зачем это на собесе
Какие готовые библиотеки используют вместо ручной работы с брокером и чем они хороши/плохи.
Объяснение
MassTransit (и аналоги Wolverine, NServiceBus, Rebus, Brighter) — .NET-абстракция над брокерами (RabbitMQ, Kafka, Azure Service Bus, SQS, in-memory): сообщения, консьюмеры, retry, outbox, саги.
builder.Services.AddMassTransit(x =>
{
x.AddConsumer<OrderPaidConsumer>();
x.AddEntityFrameworkOutbox<AppDbContext>(o => { o.UsePostgres(); o.UseBusOutbox(); }); // transactional outbox
x.UsingRabbitMq((ctx, cfg) =>
{
cfg.Host("rabbit");
cfg.UseMessageRetry(r => r.Exponential(5, TimeSpan.FromSeconds(1), TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(5)));
cfg.ConfigureEndpoints(ctx);
});
});
public record OrderPaid(Guid OrderId);
public class OrderPaidConsumer : IConsumer<OrderPaid>
{
public async Task Consume(ConsumeContext<OrderPaid> ctx) { /* ... */ }
}
await publishEndpoint.Publish(new OrderPaid(id), ct);| Возможность | Что даёт |
|---|---|
| Retry, circuit breaker, rate limit | устойчивость без ручного кода |
| Outbox/Inbox | надёжная доставка и дедупликация |
| Sagas / state machines | долгие бизнес-процессы, оркестрация |
| Request/response, scheduling | надстройки поверх брокера |
| Тестовый harness | AddMassTransitTestHarness для тестов |
Плюсы: единый API, готовые паттерны. Минусы: абстракция скрывает специфику брокера (партиции Kafka ≠ очереди RabbitMQ), версия v9+ стала коммерческой (лицензия для организаций) — обратите внимание на условия и альтернативы (Wolverine, Rebus).
Нюансы и подводные камни
- Универсальная абстракция не даёт использовать всё богатство брокера; знайте модель под капотом.
- Не проектируйте топологию «по умолчанию»: проверьте, какие exchange/очереди создаёт библиотека.
- Сообщения — контракты: версионируйте типы и пространства имён.
- Проверьте лицензирование библиотек до внедрения.
Практика
- Подключите MassTransit с RabbitMQ и outbox на EF Core.
- Реализуйте сагу «заказ → оплата → доставка».
- Напишите тест на consumer с
TestHarness.
Вопросы с ответами
Зачем MassTransit?
Готовые retry, outbox, саги и единый API вместо ручной работы с клиентом брокера.
Какие минусы у таких библиотек?
Скрытая топология, зависимость и лицензия; требуется знание брокера под капотом.