跳到主要内容
版本:5.0.1

使用 RabbitMQ Binder 进行重试

DeepSeek V3 中英对照 Retry With the RabbitMQ Binder

当绑定器中启用重试时,监听器容器线程会在配置的任何退避期间内挂起。对于需要严格排序的单一消费者场景,这一点可能很重要。然而,在其他使用场景中,这会阻止该线程处理其他消息。使用绑定器重试的替代方案是设置死信队列(DLQ)的生存时间以及 DLQ 本身的死信配置。有关此处讨论的属性的更多信息,请参阅“RabbitMQ 绑定器属性”。您可以使用以下示例配置来启用此功能:

  • 将 autoBindDlq 设置为 true。绑定器将创建一个死信队列。您可以选择在 deadLetterQueueName 中指定一个名称。

  • 将 dlqTtl 设置为您希望在重新投递之间等待的回退时间。

  • 将 dlqDeadLetterExchange 设置为默认交换器。来自死信队列的过期消息会被路由到原始队列,因为默认的 deadLetterRoutingKey 是队列名称 (destination.group)。通过将属性设置为空值(如下一个示例所示)来实现设置为默认交换器。

要强制将消息转为死信,可以抛出 AmqpRejectAndDontRequeueException 异常,或者将 requeueRejected 设置为 false(默认值)并抛出任意异常。

循环会无休止地继续,这对于暂时性问题来说是可以接受的,但你可能希望在尝试一定次数后放弃。幸运的是,RabbitMQ 提供了 x-death 头信息,让你能够确定已经发生了多少次循环。

在放弃后确认消息,抛出 ImmediateAcknowledgeAmqpException。

章节总结​