Ответ
RabbitMQ — это брокер сообщений, реализующий протокол AMQP. Его основные преимущества в архитектуре распределенных систем:
- Асинхронность и развязка сервисов: Продюсеры и консьюмеры работают независимо, что повышает отказоустойчивость и упрощает масштабирование.
- Гибкость паттернов: Поддерживает различные схемы обмена сообщениями через exchanges (Direct, Fanout, Topic, Headers).
- Надежность доставки: Подтверждения (acknowledgments), персистентность сообщений на диск и устойчивость очередей гарантируют, что сообщения не будут потеряны.
- Балансировка нагрузки: Несколько консьюмеров могут слушать одну очередь, автоматически распределяя нагрузку (работа по принципу Competing Consumers).
- Кроссплатформенность и поддержка клиентов: Имеет клиентские библиотеки для практически всех популярных языков программирования.
Практический пример объявления очереди и отправки сообщения на C#:
using RabbitMQ.Client;
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
// Объявление устойчивой (durable) очереди
channel.QueueDeclare(queue: "task_queue",
durable: true, // Сохранится после перезагрузки брокера
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Новая задача";
var body = Encoding.UTF8.GetBytes(message);
// Публикация персистентного (persistent) сообщения
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "",
routingKey: "task_queue",
basicProperties: properties,
body: body);