前言

rocketMQ消费会失败,消费失败的会发回broker再次消费,这中间需要考虑下,各个环节的失败。

消费失败处理

消费失败通用处理,参考链接,含有源码流程图。

批量消费

如果设置的是批量拉取消息,即setConsumeMessageBatchMaxSize 失败时,出现了部分不一致情况,还需要纠正下ack的顺序问题。

注:这里的ack顺序需要根据源码来确定返回什么值,再来纠正。如果直接返回了LATER之类的数值,填写的ack是会被覆盖的。

重试时间

consumer重试是有时间间隔的,它是将重试的message放入到retry的topic当中的,按照1S,5S,10S,30S,1M,2M····2H 这样不断重试。

注:广播模式下重试失效。

异常区分

异常情况:
对于程序出现的异常,一般我们try catch住,返回ConsumeConcurrentlyStatus.RECONSUME_LATER 之后,rocketMQ会按照间隔重试的。
Timeout情况:
对于此种一直不返回ack消息给broker的,rocketMQ会认为该消息没有发送,会一直发送。

参考