我正在使用EasyNetQ,并想知道如何在没有预先订阅的情况下获取现有的 IExchange
和 IQueue
?
在 IAdvanceBus
中,我只看到:
ExchangeDeclareAsync
QueueDeclareAsync
但我不确定这些是否会覆盖同名的队列或交换机?
另外,我该如何确保在尝试获取/声明它之前,队列或交换机已经存在?
ExchangeDeclareAsync
和QueueDeclareAsync
函数不会覆盖现有的交换机/队列。如果给定名称的交换机或队列已经存在,则简单地返回它。实际上,RabbitMQ中的交换机和队列是不可变的,即在创建后无法更改其属性。
这也意味着,如果您使用与现有交换机或队列不同的属性调用Exchange/QueueDeclareAsync
,则会收到一个关于PRECONDITION_FAILED
的RabbitMQ.Client.Exceptions.OperationInterruptedException
,告知您出了什么问题。
var queues = managementClient.GetQueues();
foreach (Queue queue in queues)
{
Console.Out.WriteLine("queue.Name = {0}", queue.Name);
}
但如果您重新声明队列或交换机,则不会覆盖它。什么也不会发生。