本文介绍消息队列RabbitMQ版服务端默认的消息重试机制,帮助您理解消费失败后的消息处理逻辑,并选择合适的消息处理策略。

重试机制

消息队列RabbitMQ版服务端有默认的消息重试机制,不支持您在Consumer客户端重新配置消息重试机制。如果您开启了Consumer客户端消费消息,消费失败,即Consumer客户端一分钟内没有应答消息,则触发消息重试:
  • 重试期间,任何一次消费成功,即Consumer客户端应答消息,则立即停止消息重试。
  • 重试间隔时间以秒为单位,最小10秒,最大1800秒,默认60秒。
  • 重试最多16次。超过16次,则停止重试。您可以选择:
    • 丢弃消息:如果您没有为重试失败的消息所在的Queue配置死信Exchange,则消息重试失败后被丢弃。
    • 将消息发送至死信Exchange:如果您为重试失败的消息所在的Queue配置了死信Exchange,则消息重试失败后被发送到死信Exchange,并根据RoutingKey和Binding Key被路由至目标Queue。目标Queue中的消息支持查询和导出。如何配置死信Exchange,请参见死信Exchange

重试间隔时间配置

您可以在声明Queue时基于Queue粒度配置不同的消费重试间隔,配置完成后,所有从该Queue消费的消息的重试间隔都以配置的时间为准。您可以通过x-retry-interval(单位:秒,取值范围10~1800,默认为60)参数设置重试间隔时间。代码示例如下:
Map properties = new HashMap();
properties.put("x-retry-interval", 150);
AMQP.Queue.DeclareOk queueDeclareOk = channel.queueDeclare(Producer.QueueName, true, false, false, properties);