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