rocketmq 重试
如果消费失败,默认顺延继续重试(从lastOffset)
rocketmq 重试:
1、重试机制基于延迟来实现的
2、消费失败后,会把ackIndex设置为-1,并且发送给broker,也就是重新消费
2.1 如果发送ack消息成功,那么重试机制由broker负责,如果发送失败,默认5s后由消费端自己重试消费。
3、需要重试的消费即延迟执行的消息,会存入commitlog,在这之前会备份原先的主题(retry+消费组名称,注意:这时的主题和消费组有关了,每个消费组有自己的重试主题)、
消费队列id,并且修改主题为SCHEDULE_TOPIC_XXXX,之后会被ScheduleMessageService 拉取。
4、ScheduleMessageService 在执行过程中,会再次存入 commitlog(可以理解为所有的数据都放在commitlog上面) 文件中,放入之前会清空延迟等级,并恢复主题与队列,这样就能被消费者所消费,因为消费者在启动时就订阅了该消费组的重试主题。