在咱們的rabbitmq將消息發送給消費者的過程當中,很容易出現,消息被消費者消費了,可是當消費者在返回ack以後,rabbitmq沒有收到的狀況,好比消費者恰好消費以後,在返回ack以前掛掉了,或者返回ack以前,網絡壞了。那麼,下次啓動起來或者網絡好的狀況下,有可能再一次收到該條消息。數據庫
解決方案網絡
因此須要去重,保證接口的冪等,須要給每一次的消息帶一個全局惟一ID,這樣消費者每次接受到消息了以後,能夠判斷這個消息是否已經消費過,若是消費過就能夠丟掉這個消息不予處理,消費者就能夠保證冪等了。ui
建議的信息格式:unix
{"messageId":消息 id,全局唯一,用於去重 "sendAt":消息發佈時間,unix 時間戳 "data":{} //要發送的數據 }
全局惟一id能夠根據業務id(固然這個id是數據庫主鍵來確保惟一)來,也能夠根據uuid來產生。code