如何防止队列重复消费?

  在网络延迟等不可控的因素下,消息被重复发送的问题不可避免,但是我们应该保证我们的消息不被重复消费。

如何解决

  在消费的业务逻辑里加入保证MQ重复消费的幂等性的操作。

什么是幂等性

  其任意多次执行多产生的影响均与一次执行的影响相同。  

如何保证幂等性

  从业务的实际操作划分解决方案

  1. 仅使用消息进行数据库插入操作:给消息加一个唯一主键,重复消费时会主键冲突。
  2. 仅使用消息做redis的set操作:无需处理,set本身幂等。
  3. 其他情况:利用第三方介质记录消费日志,给消息分配一个全局id,只要消费过该消息,则将k-v写入介质中,消费前先检查,如果已经消费过则不再消费。

以上总结参考:https://mp.weixin.qq.com/s/sUQmVDw-XDxrFYpIyWbYGw、https://mp.weixin.qq.com/s/RW8dwgCODAqrjdFElMo45w、https://mp.weixin.qq.com/s/Ur9173kJ6DbrsD8DRwJE4w、https://mp.weixin.qq.com/s/sB5HjHr0neS07zvkz3OSjg

原文地址:https://www.cnblogs.com/smallzhen/p/14679098.html