网络不可达是造成消息重复的根本原因,但这种情况无法避免。当消费端收到两个一样的消息时,应该如何处理呢?
- 1.消费端处理消息的业务逻辑保持幂等性
原理是只要第二三四条消息执行时对项目不会造成影响,那么就不需要去管它。例如此消息为判断true或false
- 2.保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现。
原理是利用一张日志表来记录已经处理成功的消息ID,如果新来的消息ID已经在日志表中,那么就不再处理这条消息
RocketMQ不保证消息不重复,重复时如果由消息系统来处理会对消息系统的吞吐量和高可用有影响,所以需要在业务的进行消息去重操作。