首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改RabbitMQ队列中的参数

更改RabbitMQ队列中的参数
EN

Stack Overflow用户
提问于 2016-10-20 06:14:15
回答 1查看 9.8K关注 0票数 4

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

代码语言:javascript
复制
var result = _channel.QueueDeclare("NewQueue", true, false, false, null);

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

代码语言:javascript
复制
_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‘in RabbitMQ.Client.dll 附加信息: AMQP操作被中断: AMQP关闭原因,由Peer、code=406、text="PRECONDITION_FAILED -不等效arg‘x死信-exchange’为vhost中的队列'NewQueue‘/:接收'longstr’但当前是空的'dl.exchange‘的值,classId=50,methodId=10,cause=。

这个错误似乎是不言自明的,如果我删除队列,当我重新创建它时,我不会得到错误,但是我的问题是:是否有一种方法可以在不删除队列的情况下进行此更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 07:12:44

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

但您可以使用以下策略:

代码语言:javascript
复制
rabbitmqctl set_policy DLX "NewQueue" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues

通过这种方式,您可以添加或删除队列args而不删除它。

有关更多细节,请参见在这里读

配置使用策略 若要使用策略指定DLX,请将键“死信交换”添加到策略定义中。同样,可以通过在策略中添加“死信路由-密钥”来指定显式路由密钥。 还可以使用管理插件定义策略,有关详细信息,请参阅策略文档。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40146740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档