前言
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会认为该消息没有发送,会一直发送。