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