rocketMQ重试机制
重试机制是 从 broker发往consumer消费的路上,消费失败;然后producer会重新向broker发消息。
但是重试消息的topic与原topic还是有区别的
可以看到是%RETRY%+消费失败的consumerGroup名
重试16次仍然失败,会进入死信队列。(默认重试16次,最后一次的间隔时间是2小时)
这个重试次数是可配的,比如也可配20次。
不过从16次往后的间隔时间都是2小时,这个是RocketmQ的一个机制。
注:重试的消息,MessageId与原消息是相同的
死信队列的topic是 %DLQ%+消费失败的consumerGroup名
同样的,死信队列对应的也是消费者组,这也在提醒开发者,这个消费者组出问题了,无法正常消费消息。
at least once
关于消费重试,还有就是官方对于消息重复消费的声明。
保证消息至少消费一次,但是很难做到exactly once(刚好一次),所以rocketMQ即使在正常情况下,也会有消息重复的情况,需要开发者在接入时,自行做幂等处理。
关于幂等处理,rocketMQ官方,不建议使用messageId做幂等(因为这个不一定靠谱),所以建议使用自己的业务参数做幂等。