使用 RabbitMQ Binder 重试
当在Binder中启用重试时,对于任何配置的回退周期,监听器容器线程都会暂停。当需要使用单个消费者进行严格排序时,这可能很重要。但是,对于其他用例,它会阻止该线程处理其他消息。使用Binder重试的替代方法是设置死信队列(DLQ)的生存时间以及DLQ本身的死信配置。有关此处讨论的属性的更多信息,请参阅“RabbitMQ Binder 属性”。您可以使用以下示例配置来启用此功能
-
将
autoBindDlq
设置为true
。Binder将创建一个DLQ。或者,您可以在deadLetterQueueName
中指定名称。 -
将
dlqTtl
设置为两次重试之间要等待的回退时间。 -
将
dlqDeadLetterExchange
设置为默认交换机。由于默认的deadLetterRoutingKey
是队列名称(destination.group
),因此DLQ中过期的消息将被路由到原始队列。如下一个示例所示,通过设置不带值的属性来实现对默认交换机的设置。
要强制将消息标记为死信,请抛出AmqpRejectAndDontRequeueException
异常,或者将requeueRejected
设置为false
(默认值)并抛出任何异常。
循环将无限期地继续,这对瞬态问题来说很好,但是您可能希望在尝试几次后放弃。幸运的是,RabbitMQ 提供了x-death
头,它允许您确定发生了多少个循环。
要在放弃后确认消息,请抛出ImmediateAcknowledgeAmqpException
异常。