更改 RabbitMQ 队列中的参数
Posted
技术标签:
【中文标题】更改 RabbitMQ 队列中的参数【英文标题】:Change the arguments in a RabbitMQ queue 【发布时间】:2017-03-01 23:59:42 【问题描述】:我有一个 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发起,code=406,text="PRECONDITION_FAILED - 队列“NewQueue”的不等价参数“x-dead-letter-exchange” vhost '/':收到了类型为 'longstr' 的值 'dl.exchange' 但是 当前为无”,classId=50,methodId=10,cause=
错误似乎很容易解释,如果我删除队列,当我重新创建它时,我没有收到错误,但我的问题是:有没有办法在不删除队列的情况下进行此更改?
【问题讨论】:
【参考方案1】:不,默认情况下您必须删除队列并重新创建它。
但您可以使用该政策:
rabbitmqctl set_policy DLX "NewQueue" '"dead-letter-exchange":"my-dlx"' --apply-to queues
通过这种方式,您可以添加或删除队列args
而无需删除它。
Read here 了解更多详情。
使用策略配置
要使用策略指定 DLX,请将键“死信交换”添加到 政策定义。 类似地,可以通过添加键来指定显式路由键 策略的“死信路由键”。
也可以使用管理插件定义策略,请参阅 政策文档了解更多详情。
【讨论】:
以上是关于更改 RabbitMQ 队列中的参数的主要内容,如果未能解决你的问题,请参考以下文章
基于SSM框架的商品实时秒杀系统的设计与实现.rar(论文设计+项目源码) 采用SSM+redis缓存+rabbitMS消息队列