![](/img/trans.png)
[英]Spring with AMQP and RabbitMQ, queue with optional x-dead-letter-exchange
[英]Rabbitmq dead letter exchange not working resulting in infinite retries
我有一个制作人:
rabbitTemplate.convertAndSend(QueueConstants.PROVISIONING_EXCHANGE, QueueConstants.PROVISIONING_ROUTING_KEY, message);
还有我的配置:
@Bean
Queue organizationProvisioningQueue() {
return QueueBuilder.durable(QueueConstants.PROVISIONING_QUEUE)
.withArgument("x-dead-letter-exchange", "")
.withArgument("x-dead-letter-routing-key", QueueConstants.DEAD_LETTER_QUEUE)
.build();
}
@Bean
Queue deadLetterQueue() {
return QueueBuilder.durable(QueueConstants.DEAD_LETTER_QUEUE).build();
}
@Bean
DirectExchange exchange() {
return new DirectExchange(QueueConstants.PROVISIONING_EXCHANGE);
}
@Bean
Binding binding() {
return BindingBuilder.bind(organizationProvisioningQueue()).to(exchange()).with(QueueConstants.PROVISIONING_ROUTING_KEY);
}
和我的消息处理器:
@RabbitListener(queues = QueueConstants.PROVISIONING_QUEUE)
public void process(ProvisioningMessage message) throws ProvisioningException {
System.out.println("Processing " + message);
throw new ProvisioningException ("Some ex " + message);
}
和常数:
public static final String PROVISIONING_EXCHANGE = "provisioning-exchange";
public static final String PROVISIONING_ROUTING_KEY = "provisioning";
public static final String PROVISIONING_QUEUE = "provisioning-queue";
public static final String DEAD_LETTER_QUEUE = PROVISIONING_QUEUE + ".dlq";
死信队列不起作用,因为每次抛出异常后消息都会重新排队,从而导致无限循环而不是进入死信队列。
我已经将我的队列名称更改为以 .dlq 结尾,因为它被建议但仍然没有成功。 我究竟做错了什么?
您需要抛出AmqpRejectAndDontRequeueException
或将侦听器容器的defaultRequeueRejected
属性设置为false
。
dlq 的名称无关紧要。
最近我遇到了类似的问题(异常情况下消息的无限重新排队)。 在我的情况下,此应用程序属性的设置解决了问题:
spring.rabbitmq.listener.simple.default-requeue-rejected=false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.