首页 > 其他 > 详细

消息队列怎么保证消息有没有重复消费(幂等性)?

时间:2021-05-10 15:18:38      阅读:13      评论:0      收藏:0      [点我收藏+]

普通业务控制幂等性

1.mysql唯一索引

2.token机制(请求前生成一个token,请求时携带这个token,如果这个token在redis中没有则继续,有则 有请求进行中)

3.mysql悲观锁,乐观锁(推荐使用乐观锁)

4.分布式锁(redis,zookeeper)

问题的原因

我看先来看下整个流程,怎么会出现重复的消息呢?
生产者 -> MQ -> 消费者

1.生产者发送了多条同样的消息到MQ

2.一条消息消费了多次(在生产者只发送了一条消息的情况下,消费者消费完成,再给MQ发生消息确认这条消息消费完成,但是网络异常或服务中断,MQ没有收到确认。此时MQ不会删除此消息,下次再把这条消息给到消费者)

问题1 解决方案

只要保证消息生成者不重复发送消息给MQ即可

问题2 解决方案(主要问题)

1.mysql唯一索引

2.token机制,消费者消费时去查询redis中是否存在,不存在 去消费并把token存入redis。存在 消息不处理。

消息队列怎么保证消息有没有重复消费(幂等性)?

原文:https://www.cnblogs.com/GoslingWu/p/14750873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!