在網絡延遲等不可控的因素下,消息被重復發送的問題不可避免,但是我們應該保證我們的消息不被重復消費。
如何解決?
在消費的業務邏輯里加入保證MQ重復消費的冪等性的操作。
什么是冪等性?
其任意多次執行多產生的影響均與一次執行的影響相同。
如何保證冪等性?
從業務的實際操作划分解決方案
- 僅使用消息進行數據庫插入操作:給消息加一個唯一主鍵,重復消費時會主鍵沖突。
- 僅使用消息做redis的set操作:無需處理,set本身冪等。
- 其他情況:利用第三方介質記錄消費日志,給消息分配一個全局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