|
对于最新的稳定版本,请使用 spring-cloud-stream 4.3.0! |
使用 RabbitMQ Binder 重试
在 Binder 中启用重试时,侦听器容器线程将在配置的任何回退期内挂起。当需要对单个使用者进行严格排序时,这可能很重要。但是,对于其他用例,它会阻止在该线程上处理其他消息。使用绑定器重试的替代方法是在死信队列 (DLQ) 上设置生存时间以及 DLQ 本身上的死信配置。有关此处讨论的属性的更多信息,请参阅“RabbitMQ Binder 属性”。您可以使用以下示例配置来启用此功能:
-
设置
autoBindDlq自true. 活页夹创建 DLQ。或者,您可以在deadLetterQueueName. -
设置
dlqTtl到您要在重新投放之间等待的回退时间。 -
将
dlqDeadLetterExchange到默认交换。来自 DLQ 的过期消息将路由到原始队列,因为默认deadLetterRoutingKey是队列名称 (destination.group). 设置为默认交换是通过设置没有值的属性来实现的,如下一个示例所示。
要强制消息为死信,请抛出AmqpRejectAndDontRequeueException或将requeueRejected自false(默认值)并抛出任何异常。
循环无休止地继续下去,这对于暂时性问题来说很好,但你可能想在尝试几次后放弃。幸运的是,RabbitMQ 提供了x-death标头,可让您确定发生了多少个周期。
要在放弃后确认消息,请抛出一个ImmediateAcknowledgeAmqpException.