更改 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 队列中的参数的主要内容,如果未能解决你的问题,请参考以下文章

消息队列MQ——Spring Boot整合RabbitMQ

如何快速查看 rabbitmq 指定的配置

手动的进行消息应答

rabbitMQ+php

Rabbitmq示例之RPC模式

基于SSM框架的商品实时秒杀系统的设计与实现.rar(论文设计+项目源码) 采用SSM+redis缓存+rabbitMS消息队列