直接來正確的思考方式:不管如何,消息重復(fù)問題不可避免,消費端直接就想想收到了重復(fù)的消息怎么辦就行了。那自然就引出了第一個要解決的問題,就是消費端先考慮怎么知道兩個消息是重復(fù)的?那又自然引出了兩種解決辦法。第一種,消息體里面放一個 ID,消費端自己根據(jù)這個 ID 來判斷是不是同一個消息。第二種,mq 提供一種機制,可以查詢一條消息是否已經(jīng)發(fā)送過。兩種方式,一種交給自己,一種交給別人,搞定了消息是不是重復(fù)的這個判斷問題。接下來,解決如果重復(fù)了怎么辦?那這個問題就十分業(yè)務(wù)了,可以放飛自我回答,但也分兩種思想。第一種,業(yè)務(wù)端不在乎,重復(fù)就重復(fù)了,比如一篇文章的閱讀數(shù),多一個少一個,不在乎。第二種,各種辦法實現(xiàn)冪等,比如數(shù)據(jù)庫弄唯一標(biāo)識,重復(fù)插入就直接報錯?;蛘邌为毰粡埍恚严⑽ㄒ粯?biāo)識存起來,來一條消息時先判斷是否在這個表里,如果已經(jīng)存在了就什么都不做。其實,也是一種交給業(yè)務(wù)邏輯自己處理,一種交給其他人比如 mysql 處理。