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