消息中间件-异步、解耦、削峰,消息的可靠特性,可靠指在将消息发送至消息中间件时,消息不会丢失,即消息至少会保证消息将被消费者消费成功一次,消息中间件的基本特性之一,也就是我们常说的“AT LEAST ONCE”,即消息至少会被“成功消费一遍”。
消息中间件给A服务发送消息,在A服务即将消费完成返回消费成功消息时,A服务宕机或者其他异常情况,这时候这个消息并没有标记为消费成功,对于消息中间件来说这个消息是不成功的,将继续发送消息给A服务,直至成功,才停止发送;但对A服务而言,已经处消费成功了,但是消息中和间还在重复投递。
这在RockectMQ的场景来看,就是同一个messageId的消息重复投递下来了。
基于消息的投递可靠(消息不丢)是优先级更高的,且由消息系统实现的话,肯定会对消息系统的吞吐量和高可用有影响这也是rocketmq不处理消息重复的原因。消息去重就需要在业务端去实现去重。
这也是为什么RocketMQ的文档里强调的,消费逻辑需要自我实现幂等。背后的逻辑其实就是:不丢和不重是矛盾的(在分布式场景下),但消息重复是有解决方案的,而消息丢失是很麻烦的。

消息去重解决方案

rocketmq如何保证消息不丢失

https://blog.csdn.net/leeasony/article/details/104857576