RocketMQ源码之消息重试!
RocketMQ源码之消息重试!
月伴飞鱼重试时间
消息消费失败后,并不会立即重试,而是有一个递增的时间间隔来进行重试,重试次数默认16次。
只比延迟消息的时间间隔等级少了前两个,延迟消息总共有 18 个等级。
- 而消息重试使用了原延迟消息的第
3 - 18等级
1 | 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h |
基本原理
重试的
Message,RocketMQ的做法并不是将其投递回原Topic,而是重试队列。每个
ConsumerGroup都有自己的重试队列:
- 其名称是由特定的前缀拼接上
ConsumerGroup所组成,默认%RETRY%+消费者组名称。- 所以在
Consumer启动时,就会同时消费其ConsumerGroup对应的重试队列和普通队列。消费失败的
Message,Consumer会将其投回Broker:
- 相当于这条
Message已经被消费掉了,之后重试的只是内容相同、但实际不是同一条的Message。- 然后会校验重试的次数,如果达到16次则会进入死信队列 ,组成为
%DLQ%+消费者组名称。- 未达到最大重试次数,则会根据重试间隔时间等级将其投递到延迟队列
SCHEDULE_TOPIC_XXXX中。- 然后等到了延迟等级对应的时间之后,再投递到
ConsumerGroup所对应的重试队列当中,供后续消费。














