1

我有一个似乎是正确配置的 RabbitMQ 队列(显示 dlx 参数),并且在我的 Java 侦听器代码中,我抛出了一个FatalListenerExecutionException. 出于某种原因,在抛出异常后,指定的死信队列中没有显示任何内容。

我是否抛出了错误的异常?

谢谢。

Spring配置中的队列实例化:

Map arguments = new HashMap();
arguments.put("x-dead-letter-exchange", "dlx.queue");
new Queue("some.queue", true, false, false, arguments);

Spring 配置中的侦听器容器:

public SimpleMessageListenerContainer 
someContainer(){
        final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueues(createTheQueue());
        container.setMessageListener(theListener());
        container.setConcurrentConsumers(numberOfConcurrentConsumers);
        container.setMaxConcurrentConsumers(maxDefaultConsumers);
        container.setDefaultRequeueRejected(false);
        return container;
    }

RabbitMQ 控制台中显示的“some.queue”的绑定:

Parameters : x-dead-letter-exchange:    dlx.queue
4

2 回答 2

1

您必须抛出AmqpRejectAndDontRequeueException,否则就足以defaultRequeuRejected="false"为侦听器容器设置。

请参阅 Spring AMQP 的测试用例:https ://github.com/spring-projects/spring-amqp/blob/master/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/core/FixedReplyQueueDeadLetterTests .java

于 2015-02-02T21:26:14.697 回答
0

实际上,我只需要指定路由键(因为它是直接交换而不是扇出)。我从这个问题中了解到:

RabbitMQ 死信交换永远不会收到消息

于 2015-02-03T18:39:59.203 回答