面试题-MQ如何保证消息不被重复消费(三)

2024-01-23 12:35:19 浏览数 (3)

面试题,如果消息重复了,我们应该如何处理呢

首先,我们不管用什么消息中间件,都会有重复消费的消息的可能,此时如何解决呢

比如,我们的kafka,每一条消息都有一个offset,唯一标识这个条消息,默认情况下,消费者在消费完消息之后,然后在提交这个offset,消费者更才会认为消息被消费了,但是,我说的是但是,在消费这个提交offset此刻,我们的消费者重启了,没有到这个提交,我们的消费者更就不知道消费者消费了,然后消费者更会继续消费消息,此时消费者就会重复消费消息

这个种问题如何解决呢,

  • 第一种,消费者,先查一下数据库,看看有没有数据,如果有,可以不消费,或者更新
  • 第二种,把消息放到redis里面,看看有没有,没有的话,我们再去消费
  • 第三种,直接在表里建立一个唯一索引,如果重复,直接报错,防止重复插入

其实就是让我们的消费者保证幂等性,就可以了

0 人点赞