【问题标题】:Change the arguments in a RabbitMQ queue更改 RabbitMQ 队列中的参数
【发布时间】: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=

错误似乎很容易解释,如果我删除队列,当我重新创建它时,我没有收到错误,但我的问题是:有没有办法在不删除队列的情况下进行此更改?

【问题讨论】:

    标签: c# rabbitmq message-queue


    【解决方案1】:

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

    但您可以使用该政策:

    rabbitmqctl set_policy DLX "NewQueue" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues
    

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

    Read here 了解更多详情。

    使用策略配置

    要使用策略指定 DLX,请将键“死信交换”添加到 政策定义。 类似地,可以通过添加键来指定显式路由键 策略的“死信路由键”。

    也可以使用管理插件定义策略,请参阅 政策文档了解更多详情。

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2022-12-03
      • 2021-06-14
      • 2018-02-09
      相关资源
      最近更新 更多