Ответ
В проекте использовались 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.
Ответ 18+ 🔞
А, ну это классика, блядь! Смотри, у нас в проекте два этих зверя работали — RabbitMQ и Azure Service Bus. Каждый на своей поляне пасся, потому что задачи у них, сука, разные, как небо и земля.
RabbitMQ — это наш внутренний разговорчик, для микросервисов. Штука быстрая, как угорелая, лицензия открытая, и маршрутизацию сообщений через AMQP можно выстроить как душе угодно. Ну, там всякие очереди, подписки, публикации — полный картель, блядь. Когда нужно, чтобы всё внутри кластера летало со скоростью света и по сложным схемам — это его стезя.
Вот, смотри, как на C# с ним работают, чтоб ты понимал масштаб:
var factory = new ConnectionFactory() { HostName = "rabbitmq-host" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
// Объявляем очередь, чтоб не сдохла при перезагрузке
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);
};
// Выключаем авто-подтверждение, чтоб самим рулить
channel.BasicConsume(queue: "order-queue",
autoAck: false,
consumer: consumer);
А Azure Service Bus — это уже для серьёзных отношений с облаком. Когда тебе, блядь, критично, чтобы каждое сообщение доползло куда надо, да ещё и в строгом порядке. Там отказоустойчивость встроенная, сессии, и он с другими сервисами Azure как родной целуется — Functions там, Logic Apps. Управляемость — просто песня, но и цена соответствующая, ёпта.
Так что выбирали по уму:
- RabbitMQ: Когда нужно внутри своего стойла всё разогнать до предела, накрутить хитрую маршрутизацию и иметь полный контроль над этой фермой. Свой админ, свои правила.
- Azure Service Bus: Когда проект уже в облаке Azure сидит, и тебе нужно гарантий дохуя, SLA, и чтоб всё из коробки работало. Когда нет желания, блядь, возиться с инфраструктурой, а просто пользоваться.