我有一个 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,原因=
该错误似乎非常不言自明,如果我删除队列,当我重新创建它时,我不会收到错误,但我的问题是:有没有办法在不删除队列的情况下进行此更改?
不,默认情况下您必须删除队列并重新创建它。
但您可以使用该策略:
rabbitmqctl set_policy DLX "NewQueue" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues
这样你就可以添加或删除队列args
而不删除它。
在这里阅读 https://www.rabbitmq.com/dlx.html了解更多详情。
使用策略进行配置
要指定 DLX 使用策略,请将键“dead-letter-exchange”添加到
政策定义。
类似地,可以通过添加 key 来指定显式路由键
该策略的“死信路由密钥”。
还可以使用管理插件定义策略,请参阅
政策文档以获取更多详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)