RabbitMQ - Что значит объявить очередь?

Я новичок в RabbitMQ и у меня есть вопрос. Вот образец фрагмента, который я часто вижу в уроках.

    public static void Send(string queueName, string data)
    {
        using (IConnection connection = new ConnectionFactory().CreateConnection())
        {
            using (IModel channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: queueName,
                    durable: true,
                    exclusive: false,
                    autoDelete: false,
                    arguments: null);

                // Publish to the named queue
                channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));
            }
        }
    }

Я смущен, потому что концепция объявления очереди каждый раз, когда вы хотите вызвать Send функция немного странная для меня. Означает ли это, что он создает новую очередь каждый раз?

Некоторые примеры кода для получения из очереди также имеют queueDeclare вызов. Зачем это нужно там?

1 ответ

Решение

Нет, он создает очередь, только если она еще не существует:

Объявить очередь, создать при необходимости.

Этот метод создает или проверяет очередь. При создании новой очереди клиент может указать различные свойства, которые управляют долговечностью очереди и ее содержимым, а также уровнем общего доступа для очереди.

А также

Декларация и эквивалентность имущества

Прежде чем очередь может быть использована, она должна быть объявлена. Объявление очереди приведет к ее созданию, если она еще не существует. Объявление не будет иметь эффекта, если очередь уже существует и ее атрибуты такие же, как в объявлении. Если существующие атрибуты очереди не совпадают с указанными в объявлении, будет сгенерировано исключение на уровне канала с кодом 406 (PRECONDITION_FAILED).

Рекомендации 1 и 2

Другие вопросы по тегам