我有一个似乎是正确配置的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
答案 0 :(得分: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
答案 1 :(得分:0)
实际上,我只需要指定路由密钥(因为它是直接交换而不是扇出)。我从这个问题中了解到: