繁体   English   中英

如何在 Rabbit 中设置 x-dead-letter-exchange?

[英]How to set x-dead-letter-exchange in Rabbit?

这是我的豆子:

    @Bean
    public Queue igSmev3ListenerQueue() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-dead-letter-exchange", rabbitIgSmev3DlxProperties.getExchangeName());
        args.put("x-dead-letter-routing-key", rabbitIgSmev3DlxProperties.getRoutingKey());
        return new Queue(rabbitIgSmev3ListenerProperties.getQueueName(), true, false, false, args);
    }

    @Bean
    public Queue igSmev3DlxQueue() {
        return new Queue(rabbitIgSmev3DlxProperties.getQueueName(), true, false, false);
    }

以下是 application.yml 设置:

listener:
  vhost: /
  exchangeName: igSmev3Listener
  queueName: igSmev3-ListenerQueue
  routingKey: igSmev3-Listener
dlx:
  vhost: /
  exchangeName: igSmev3Dlx
  queueName: igSmev3-DlxQueue
  routingKey: igSmev3-Dlx

我目前的错误:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'igSmev3-ListenerQueue' in vhost '/': received none but current is the value 'igSmev3Dlx' of type 'longstr', class-id=50, method-id=10)

我该如何解决? 我需要从 listenerQueue 中取出死信并将它们放入 dlxQueue

vhost'/'中队列'igSmev3-ListenerQueue'的不等价arg'x-dead-letter-exchange':没有收到,但当前是'longstr'类型的值'igSmev3Dlx'

这意味着您已经在代理上有一个igSmev3-ListenerQueue队列,并且它没有“x-dead-letter-exchange”参数。 可能您之前使用 state 创建了它。

在使用已经提供的 DLX 启动您的应用程序之前,请考虑删除此队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM