Очереди и интеграции

Тема дорожной карты · .NET / C# Developer

Messaging в .NET-стеке — это набор клиентов и абстракций для асинхронного взаимодействия между сервисами через брокеры (RabbitMQ, Kafka, Azure Service Bus, NATS). В отличие от HTTP-вызовов очереди дают отложенную обработку, retry-механизм, fan-out на нескольких потребителей и устойчивость к падению одного из участников. Для .NET-команд канонический набор: MassTransit как высокоуровневая абстракция, Confluent.Kafka для прямой работы с Kafka, NServiceBus для enterprise-сценариев.

Как это работает

MassTransit поверх RabbitMQ или Azure Service Bus реализует паттерны publish-subscribe, request-response, sagas, scheduled-messages. Регистрируется в DI: services.AddMassTransit(x => { x.UsingRabbitMq(...); x.AddConsumer<MyConsumer>(); });. Consumer — класс с методом Consume(ConsumeContext<T>), MassTransit десериализует payload и подкладывает в DI. Confluent.Kafka работает ниже уровнем — producer/consumer пишут и читают Message<TKey, TValue> через IProducer и IConsumer. Saga-паттерн поддерживается через MassTransitStateMachine — конечный автомат с персистентностью состояния в БД.

Когда применять

Используйте messaging, как только сервис должен отдать долгую задачу в фон (генерация PDF, email-рассылка, обработка платежей) или когда нужна fan-out обработка одного события несколькими сервисами. Choose RabbitMQ для command-style сообщений (тысячи сообщений/сек), Kafka для event-streaming (миллионы/сек, replay), Azure Service Bus в Azure-инфре. MassTransit стоит платить за абстракцию, если команда не хочет работать с raw-клиентами.

Типичные ошибки

Слишком тонкие сообщения — каждое поле в отдельной очереди превращает архитектуру в кошмар, лучше укрупнять. Отсутствие idempotency — без неё retry создают дубли в БД. Игнорирование dead-letter queue — poison-сообщения блокируют consumer навсегда. Отсутствие версионирования сообщений — изменение схемы ломает существующих consumer-ов. Использование MassTransit без понимания, что под ним RabbitMQ — приводит к непредсказуемым проблемам с persistence и acknowledgements. Слепая вера в exactly-once без анализа реального протокола брокера — RabbitMQ это at-least-once с consumer-ack, Kafka даёт exactly-once только на confluent-стороне через транзакции.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…