网络延迟传输中,会进行MQ的重试,可能会出现重复消费。
如果一条消息是做数据库的插入操作,那么给这个消息做一个唯一主键,如果出现了重复消息,从数据库主键唯一性层面,导致主键冲突,可以避免重复插入数据。
可以使用第三方服务来做消费记录,以redis为例,给消息分配一个全局id,只要消息消费过,将<id,message>写入redis,当消费者开始消费之前,先去redis里查看有没有消费记录。
如果有消费记录,那么这条消息已经被处理过,否则,执行消费逻辑,并将<id,message>存到redis里。