更改RabbitMQ队列中的参数

Change the arguments in a RabbitMQ queue(更改RabbitMQ队列中的参数)

本文介绍了更改RabbitMQ队列中的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个RabbitMQ队列,最初声明如下:

var result = _channel.QueueDeclare("NewQueue", true, false, false, null);

我尝试添加一个死信交换,所以我将代码更改为:

_channel.ExchangeDeclare("dl.exchange", "direct");
Dictionary<string, object> args = new Dictionary<string, object>()
{
    { "x-dead-letter-exchange", "dl.exchange" }
};            

var result = _channel.QueueDeclare("NewQueue", true, false, false, args);

当我运行此命令时,我收到错误:

抛出异常: ‘RabbitMQ.Client.Exceptions.OperationInterruptedException’输入 RabbitMQ.Client.dll

其他信息:AMQP操作已中断:AMQP Close-Reason,由Peer发起,代码=406,Text="前置条件_失败- 中队列‘NewQueue’的不等价参数‘x-死信-交换’ Vhost‘/’:收到了类型为‘Longstr’的值‘dl.Exchange’,但是 Current is None",类ID=50,方法ID=10,原因=

错误似乎不言而喻,如果我删除队列,当我重新创建它时,我不会收到错误,但我的问题是:是否有方法在不删除队列的情况下进行此更改?

推荐答案

否,默认情况下您必须删除队列并重新创建。

但您可以使用以下策略:

rabbitmqctl set_policy DLX "NewQueue" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues
通过这种方式,您可以添加或删除队列args,而无需删除它。

Read here了解更多详细信息。

使用策略进行配置

要使用策略指定DLX,请将密钥"死信交换"添加到 策略定义。 同样,可以通过添加密钥来指定显式路由密钥 策略的"死信路由关键字"。

也可以使用管理插件定义策略,请参阅 有关更多详细信息,请参阅策略文档。

这篇关于更改RabbitMQ队列中的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:更改RabbitMQ队列中的参数

基础教程推荐