高並發分布式中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