使用 RabbitMQ 绑定器重试

当绑定器中启用重试时,侦听器容器线程会因配置的任何退避期而暂停。 当单个消费者需要严格排序时,这可能很重要。但是,对于其他用例,它会阻止在该线程上处理其他消息。 使用绑定器重试的替代方法是设置死信队列(DLQ)的死信,并设置死信队列本身的存活时间。 有关此处讨论的属性的更多信息,请参阅“RabbitMQ 绑定器属性”。 您可以使用以下示例配置来启用此功能:

  • autoBindDlq 设置为 true。 绑定器会创建一个 DLQ。 您可以选择在 deadLetterQueueName 中指定名称。

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

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

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

循环会无休止地继续,这对于瞬态问题来说很好,但您可能希望在尝试一定次数后放弃。 幸运的是,RabbitMQ 提供了 x-death 头,它允许您确定发生了多少个循环。

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