Junior
150
questionbank
Какие базовые сущности существуют в RabbitMQ?
Answer from AI
sobes.tech AI
В RabbitMQ существуют следующие базовые сущности:
- Producer (Производитель): Отправляет сообщения в обменник.
- Consumer (Потребитель): Получает сообщения из очереди.
- Broker (Брокер): Сервер RabbitMQ, который принимает, маршрутизирует и доставляет сообщения.
- Queue (Очередь): Буферное хранилище для сообщений. Сообщения ожидают обработки потребителями в очередях.
- Exchange (Обменник): Принимает сообщения от производителя и маршрутизирует их в одну или несколько очередей на основе правил маршрутизации. Типы обменников:
Direct: Маршрутизирует сообщения в очереди, у которых ключ маршрутизации (routing key) точно совпадает с ключом сообщения.Fanout: Маршрутизирует сообщения во все связанные очереди, игнорируя ключ маршрутизации.Topic: Маршрутизирует сообщения на основе совпадения ключа маршрутизации с шаблоном.Headers: Маршрутизирует сообщения на основе заголовков сообщения, а не ключа маршрутизации.
- Binding (Привязка): Связь между обменником и очередью, определяющая правила маршрутизации сообщений.
- Routing Key (Ключ маршрутизации): Информация, которую производитель добавляет к сообщению, чтобы обменник мог определить, в какие очереди его направить.
- 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);
}