Какие брокеры сообщений использовались на вашем прошлом проекте?

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

Ответ

В проекте использовались RabbitMQ и Azure Service Bus, каждый для своих задач.

RabbitMQ применялся для внутренней коммуникации между микросервисами благодаря его высокой производительности, гибкой маршрутизации по протоколу AMQP и открытой лицензии. Он отлично подходил для сценариев, где требовалась сложная топология обмена сообщениями (публикация/подписка, рабочие очереди).

Пример объявления очереди и получения сообщений на C#:

var factory = new ConnectionFactory() { HostName = "rabbitmq-host" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

// Объявление устойчивой (durable) очереди
channel.QueueDeclare(queue: "order-queue",
                     durable: true,
                     exclusive: false,
                     autoDelete: false,
                     arguments: null);

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
    var body = ea.Body.ToArray();
    var message = Encoding.UTF8.GetString(body);
    // Обработка сообщения
    ProcessOrder(message);
    // Подтверждение обработки
    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
};
// Отключение autoAck для ручного подтверждения
channel.BasicConsume(queue: "order-queue",
                     autoAck: false,
                     consumer: consumer);

Azure Service Bus использовался для интеграции с облачной экосистемой Azure и в сценариях, где критична гарантированная доставка и строгий порядок сообщений (очереди и топики). Его преимущества — встроенная отказоустойчивость, управление сессиями и интеграция с другими сервисами Azure (Logic Apps, Functions).

Критерии выбора:

  • RabbitMQ: Для высокопроизводительного обмена внутри кластера, сложных маршрутизаций, когда нужен полный контроль над инфраструктурой.
  • Azure Service Bus: Для облачных гибридных сценариев, когда важны SLA, управляемость и интеграция с PaaS-сервисами Microsoft.