RabbitMQ-声明队列是什么意思?

时间:2018-07-19 14:42:55

标签: c# 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 个答案:

答案 0 :(得分:2)

否,它仅在尚不存在时创建队列:

  

声明队列,根据需要创建。

     

此方法创建或检查队列。创建新队列时,   客户可以指定各种属性来控制持久性   队列及其内容,以及队列的共享级别。

  

声明与财产等效

     

在可以使用队列之前,必须先对其进行声明。宣告队列   如果尚不存在,将导致它被创建。的   如果队列已经存在,则声明将无效。   其属性与声明中的属性相同。当。。。的时候   现有队列属性与声明中的属性不同   代码为406(PRECONDITION_FAILED)的渠道级异常将是   提出。

参考文献12