一個數(shù)據(jù)或者一個請求,重復(fù)操作多次,得確保對應(yīng)的數(shù)據(jù)是不會改變的。一條數(shù)據(jù)重復(fù)出現(xiàn)兩次,數(shù)據(jù)庫里就只有一條數(shù)據(jù),這就保證了系統(tǒng)的冪等性。

如何保證消息消費的冪等性
向數(shù)據(jù)庫寫庫,先根據(jù)主鍵查一下,如果這數(shù)據(jù)已經(jīng)有了,就別插入了,update一下。如果是寫Redis,那沒問題了,反正每次都是set,天然冪等性。
稍微復(fù)雜一點,比如生產(chǎn)者發(fā)送每條數(shù)據(jù)的時候,里面加一個全局唯一的id,類似訂單id之類的東西,然后消費到了之后,先根據(jù)這個id去比Redis里查一下,之前消費過嗎?如果沒有消費過,就處理,然后這個id寫Redis。如果消費過了,那就別處理了,保證別重復(fù)處理相同的消息即可。
比如基于數(shù)據(jù)庫的唯一鍵來保證重復(fù)數(shù)據(jù)不會重復(fù)插入多條。因為有唯一鍵約束了,重復(fù)數(shù)據(jù)插入只會報錯,不會導(dǎo)致數(shù)據(jù)庫中出現(xiàn)臟數(shù)據(jù)。Kafka有個offset的概念,就是每個消息寫進去,都有一個offset,代表消息的序號,然后 consumer 消費了數(shù)據(jù)之后,每隔一段時間(定時定期),會把自己消費過的消息的 offset提交一下,表示“我已經(jīng)消費過了,下次要是重啟什么的,就從上次消費到的 offset來繼續(xù)消費”。
有這么個場景。數(shù)據(jù) 1/2/3 依次進入 Kafka,Kafka 會給這三條數(shù)據(jù)每條分配一個 offset,
代表這條數(shù)據(jù)的序號,我們就假設(shè)分配的 offset 依次是 152/153/154。消費者從 Kafka
去消費的時候,也是按照這個順序去消費。假你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:MQ消息隊列冪等性和順序性-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article38/cecepp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站設(shè)計、虛擬主機、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容