跳到主要内容

使用 RabbitMQ Binder 重试

DeepSeek V3 中英对照 Retry With the RabbitMQ Binder

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

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

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

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

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

循环会一直持续下去,这对于暂时性问题来说是没问题的,但你可能希望在尝试一定次数后放弃。幸运的是,RabbitMQ 提供了 x-death 头信息,它让你可以确定已经发生了多少次循环。

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

章节总结