RocketMQ消费重试概览

一、RocketMQ的消息消费过程中,有可能失败或报错,且支持消费重试:

重试情况(未返回消费成功状态)

  1. 消费者抛异常,或返回reconsume_later

  2. 网络超时

集群消费模式:消费失败后重试

广播消费模式:只打印日志不重试

并发消费重试

  1. 根据消费失败消息的内容,创建新消息(重试主题为%RETRY%+consumerGroup),设置延迟时间重新投递

  2. 当消息达到延迟时间,再创建重试主题的消息,保存commitLog,重新消费

  3. 并发消费最大重试次数:默认16(配置少于16),超过则进入死信队列(%DLQ%+consumerGroup)

delayTimeLevel,代表不同的消息延迟级别,开源版本18个延迟级别1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

顺序消息消费失败reconsume_later状态,默认1s再提交到消费线程不断重试

 

二、重试消费流程

并发消费失败的消息,重试处理流程如下图所示:

  1、根据消息失败的消息,构建新消息(重试消息主题为:%RETRY%+consumerGroup,消息属性中有原msgId重新投递回brokerdelayTimeLevel = 重试次数+3,如果重试次数达到16(默认值),则进入死信队列

  2、保存commitLog时,发现delayTimeLevel >0,构建新消息,将topic替换为SCEHDULE_TOPIC_XXXX,原topic保存在消息属性

  3、待延迟时间到,再创建新消息,设置重试主题:%RETRY%+consumerGroup,保存到commitLog

一个消费失败的消息体发回broker,需要在commitLog里面存储两份(topicSCHEDULE_TOPIC_XXXX的一份,主要是为控制延时;topic%RETRY%groupName的消息一份)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值