修改RabbitMQ队列中的参数
本文关键字:参数 队列 RabbitMQ 修改 | 更新日期: 2023-09-27 18:14:07
我有一个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
附加信息:The AMQP operation was interrupted: AMQPclose-reason,由Peer发起,code=406, text="PRECONDITION_FAILED - .queue 'NewQueue'的等价arg 'x死信交换'Vhost '/':收到值'dl '。交换'类型'longstr',但, classId=50, methodId=10, cause=
错误似乎不言自明,如果我删除队列,当我重新创建它时,我没有得到错误,但我的问题是:有没有一种方法可以在不删除队列的情况下进行此更改?
不能,默认情况下必须删除队列并重新创建。
但是你可以使用策略:
rabbitmqctl set_policy DLX "NewQueue" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues
这样可以添加或删除队列args
而不删除它。
阅读这里了解更多细节。
使用策略的配置
要指定DLX使用策略,将密钥"dead-letter-exchange"添加到策略定义。类似地,可以通过添加键来指定显式路由键"dead-letter-routing-key"到策略。
策略也可以使用管理插件定义,参见有关更多细节的策略文档。