高并发分布式中MQ消息重发幂等性解决方案


消费者接收重复消息幂等性解决方案:

1.利用数据库唯一性约束去实现幂等性创建消息去重表,把全局唯一ID作为主键,做唯一性约束,如果插入成功就表示没有消费过这条消息,可以进行消费了,插入失败表示消息已经被消费了。

2.利用Redis的原子性去实现幂等性我们都知道redis是单线程的,并且性能也非常好,提供了很多原子性的命令。比如可以使用 setnx 命令。在接收到消息后将消息ID作为key执行 setnx命令,如果执行成功就表示没有消费过这条消息,可以进行消费了,执行失败表示消息已经被消费了。

3.利用zookeeper分布式锁实现幂等性在接收到消息后用消息ID来获取这个锁的客户端,最终只有一个可以成功获得这把锁。通常的做法是把 zk 上的一个 znode 看作是一把锁,通过 create znode 的方式来实现。所有客户端都去创建 /lock/xxxxx 节点,最终成功创建的那个客户端就表示没有消费过这条消息,可以进行消费了,创建不成功的节点会收到异常的提示,表示消息已经被消费了。

总结:三种幂等性实现方案从性能上比较:redis-->zookeeper-->数据库性。

从安全性比较:zookeeper-->数据库-->redis

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM