Какую библиотеку вы использовали для работы с RabbitMQ в .NET?

«Какую библиотеку вы использовали для работы с RabbitMQ в .NET?» — вопрос из категории Брокеры сообщений, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для непосредственной работы с протоколом AMQP использовал официальную библиотеку RabbitMQ.Client. Для более высокоуровневых проектов — MassTransit.

1. RabbitMQ.Client (низкоуровневый контроль): Идеален, когда нужен полный контроль над соединением, каналами, QoS и топологией.

using RabbitMQ.Client;
using System.Text;

// Публикация сообщения
var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

// Объявление очереди (идемпотентная операция)
channel.QueueDeclare(queue: "orders", durable: true, exclusive: false, autoDelete: false);

var message = "New order #123";
var body = Encoding.UTF8.GetBytes(message);

// Публикация с persistent флагом для сохранения при перезагрузке брокера
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "", routingKey: "orders", basicProperties: properties, body: body);

2. MassTransit (высокоуровневая абстракция): Используется в сложных распределенных системах. Он абстрагирует RabbitMQ, предоставляет встроенную поддержку шаблонов (publish/subscribe, request/response), сериализации, повторных попыток и мониторинга.

// Конфигурация в Startup/Program.cs
services.AddMassTransit(x =>
{
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("localhost");
        cfg.ConfigureEndpoints(context); // Авторегистрация потребителей
    });
});

// Публикация сообщения через IBus
await bus.Publish(new OrderCreatedEvent { OrderId = 123 });

Выбор зависит от задачи:

  • RabbitMQ.Client — для простых интеграций или когда важны тонкие настройки AMQP.
  • MassTransit (или EasyNetQ) — для enterprise-приложений, где важна надежность, тестируемость и готовые паттерны.