使用 RabbitMQ Binder 重试
当在 Binder 中启用重试时,监听器容器线程将暂停执行任何配置的后退时间段。当使用单个消费者需要严格排序时,这一点可能很重要。但是,对于其他用例,它会阻止在该线程上处理其他消息。使用 Binder 重试的替代方法是设置死信队列 (DLQ) 上的生存时间以及 DLQ 本身的死信配置。有关此处讨论的属性的详细信息,请参阅“RabbitMQ Binder 属性”。你可以使用以下示例配置来启用此功能
-
将
autoBindDlq
设置为true
。Binder 创建一个 DLQ。或者,你可以在deadLetterQueueName
中指定一个名称。 -
将
dlqTtl
设置为希望在重新发送之间等待的后退时间。 -
将
dlqDeadLetterExchange
设置为默认交换。DLQ 中过期的消息被路由到原始队列,因为默认deadLetterRoutingKey
是队列名称 (destination.group
)。通过不设置值来设置默认交换,如下一个示例所示。
要强制将消息标记为死信,请抛出 AmqpRejectAndDontRequeueException
或将 requeueRejected
设置为 false
(默认值),并抛出任何异常。
循环会无限继续,这对于暂时的问题来说很好,但你可能希望在尝试多次后放弃。幸运的是,RabbitMQ 提供了 x-death
头,它允许你确定发生了多少个周期。
要在放弃后确认消息,请抛出 ImmediateAcknowledgeAmqpException
。