本文介绍了更改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队列中的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!