如何在EasyNetQ中获取现有的Exchange或Queue?

5

我正在使用EasyNetQ,并想知道如何在没有预先订阅的情况下获取现有的 IExchangeIQueue

IAdvanceBus 中,我只看到:

  • ExchangeDeclareAsync
  • QueueDeclareAsync

但我不确定这些是否会覆盖同名的队列或交换机?

另外,我该如何确保在尝试获取/声明它之前,队列或交换机已经存在?

2个回答

2

ExchangeDeclareAsyncQueueDeclareAsync函数不会覆盖现有的交换机/队列。如果给定名称的交换机或队列已经存在,则简单地返回它。实际上,RabbitMQ中的交换机和队列是不可变的,即在创建后无法更改其属性。

这也意味着,如果您使用与现有交换机或队列不同的属性调用Exchange/QueueDeclareAsync,则会收到一个关于PRECONDITION_FAILEDRabbitMQ.Client.Exceptions.OperationInterruptedException,告知您出了什么问题。


1
如果您在RabbitMQ中激活了管理插件,您可以使用EasyNetQ的客户端来访问管理API。文档
例如:
var queues = managementClient.GetQueues();

foreach (Queue queue in queues)
{
    Console.Out.WriteLine("queue.Name = {0}", queue.Name);
}

但如果您重新声明队列或交换机,则不会覆盖它。什么也不会发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接