Sobes.tech
Junior
150
questionbank

Какие базовые сущности существуют в RabbitMQ?

Answer from AI

sobes.tech AI

В RabbitMQ существуют следующие базовые сущности:

  1. Producer (Производитель): Отправляет сообщения в обменник.
  2. Consumer (Потребитель): Получает сообщения из очереди.
  3. Broker (Брокер): Сервер RabbitMQ, который принимает, маршрутизирует и доставляет сообщения.
  4. Queue (Очередь): Буферное хранилище для сообщений. Сообщения ожидают обработки потребителями в очередях.
  5. Exchange (Обменник): Принимает сообщения от производителя и маршрутизирует их в одну или несколько очередей на основе правил маршрутизации. Типы обменников:
    • Direct: Маршрутизирует сообщения в очереди, у которых ключ маршрутизации (routing key) точно совпадает с ключом сообщения.
    • Fanout: Маршрутизирует сообщения во все связанные очереди, игнорируя ключ маршрутизации.
    • Topic: Маршрутизирует сообщения на основе совпадения ключа маршрутизации с шаблоном.
    • Headers: Маршрутизирует сообщения на основе заголовков сообщения, а не ключа маршрутизации.
  6. Binding (Привязка): Связь между обменником и очередью, определяющая правила маршрутизации сообщений.
  7. Routing Key (Ключ маршрутизации): Информация, которую производитель добавляет к сообщению, чтобы обменник мог определить, в какие очереди его направить.
  8. Binding Key (Ключ привязки): Информация, которую очередь предоставляет обменнику для определения маршрута. В некоторых типах обменников (например, direct), ключ маршрутизации и ключ привязки должны совпадать.
// Пример объявления сущностей в C# с использованием клиента RabbitMQ
using RabbitMQ.Client;

// Создание фабрики подключений
var factory = new ConnectionFactory() { HostName = "localhost" };

using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    // Объявление обменника (Exchange)
    channel.ExchangeDeclare(exchange: "my_exchange", type: ExchangeType.Direct);

    // Объявление очереди (Queue)
    channel.QueueDeclare(queue: "my_queue", durable: true, exclusive: false, autoDelete: false, arguments: null);

    // Создание привязки (Binding) между обменником и очередью
    channel.QueueBind(queue: "my_queue", exchange: "my_exchange", routingKey: "my_routing_key");

    // Пример отправки сообщения (Producer)
    // string message = "Hello RabbitMQ!";
    // var body = Encoding.UTF8.GetBytes(message);
    // channel.BasicPublish(exchange: "my_exchange", routingKey: "my_routing_key", basicProperties: null, body: body);

    // Пример потребления сообщения (Consumer)
    // var consumer = new EventingBasicConsumer(channel);
    // consumer.Received += (model, ea) =>
    // {
    //     var body = ea.Body.ToArray();
    //     var message = Encoding.UTF8.GetString(body);
    //     Console.WriteLine($" [x] Received {message}");
    // };
    // channel.BasicConsume(queue: "my_queue", autoAck: true, consumer: consumer);
}