使用 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