使用 RabbitMQ 绑定器进行重试

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

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

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

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

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

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

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

© . This site is unofficial and not affiliated with VMware.