rabbitmq 如何在EasyNetQ中提取现有的Exchange或队列?

kmb7vmvb  于 2023-03-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(256)

我正在使用EasyNetQ,我想知道如何获取现有的IExchangeIQueue而不预先订阅?
IAdvanceBus中,我只能看到:

  • ExchangeDeclareAsync
  • QueueDeclareAsync

但我真的不确定这些是否会覆盖现有的队列或同名的交换?
另外,在尝试获取/声明队列或交换之前,我如何确保它存在?

omvjsjqw

omvjsjqw1#

如果您在RabbitMQ中激活了管理插件,则可以使用EasyNetQ的管理API客户端。Documentation
例如:

var queues = managementClient.GetQueues();

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

然而,如果你重新声明队列或交换,你不会覆盖它,什么也不会发生。

vsikbqxv

vsikbqxv2#

函数ExchangeDeclareAsyncQueueDeclareAsync不会覆盖现有的交换/队列。如果具有给定名称的交换或队列已经存在,它将简单地被返回。事实上,RabbitMQ中的交换和队列是不可变的,也就是说,在创建它们之后,您不能更改它们的属性。
这也意味着,如果您使用与现有交换或队列不同的属性调用Exchange/QueueDeclareAsync,您将得到一个RabbitMQ.Client.Exceptions.OperationInterruptedException about PRECONDITION_FAILED,确切地通知您出了什么问题。

相关问题