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
所对应的重试队列当中,供后续消费。