Ответ
Для непосредственной работы с протоколом 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-приложений, где важна надежность, тестируемость и готовые паттерны.