日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)?

發(fā)布時(shí)間:2024/9/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、面試題

如何保證消息不被重復(fù)消費(fèi)啊(如何保證消息消費(fèi)時(shí)的冪等性)?

2、面試官心里分析

其實(shí)這個(gè)很常見的一個(gè)問題,這倆問題基本可以連起來問。既然是消費(fèi)消息,那肯定要考慮考慮會不會重復(fù)消費(fèi)?能不能避免重復(fù)消費(fèi)?或者重復(fù)消費(fèi)了也別造成系統(tǒng)異常可以嗎?這個(gè)是MQ領(lǐng)域的基本問題,其實(shí)本質(zhì)上還是問你使用消息隊(duì)列如何保證冪等性,這個(gè)是你架構(gòu)里要考慮的一個(gè)問題。
面試官問你,肯定是必問的,這是你要考慮的實(shí)際生產(chǎn)上的系統(tǒng)設(shè)計(jì)問題。

3、面試題剖析

回答這個(gè)問題,首先你別聽到重復(fù)消息這個(gè)事兒,就一無所知吧,你先大概說一說可能會有哪些重復(fù)消費(fèi)的問題。
首先就是比如rabbitmq、rocketmq、kafka,都有可能會出現(xiàn)消費(fèi)重復(fù)消費(fèi)的問題,正常。因?yàn)檫@問題通常不是mq自己保證的,是給你保證的。然后我們挑一個(gè)kafka來舉個(gè)例子,說說怎么重復(fù)消費(fèi)吧。

?

Kafka實(shí)際上有個(gè)offset的概念,就是每個(gè)消息寫進(jìn)去,都有一個(gè)offset,代表它的序號,然后consumer消費(fèi)了數(shù)據(jù)之后,每隔一段時(shí)間,會把自己消費(fèi)過的消息的offset提交一下,代表我已經(jīng)消費(fèi)過了,下次我要是重啟啥的,你就讓我繼續(xù)從上次消費(fèi)到的offset來繼續(xù)消費(fèi)吧。

但是凡事總有意外,比如我們之前生產(chǎn)經(jīng)常遇到的,就是你有時(shí)候重啟系統(tǒng),看你怎么重啟了,如果碰到點(diǎn)著急的,直接kill進(jìn)程了,再重啟。這會導(dǎo)致consumer有些消息處理了,但是沒來得及提交offset,尷尬了。重啟之后,少數(shù)消息會再次消費(fèi)一次。

其實(shí)重復(fù)消費(fèi)不可怕,可怕的是你沒考慮到重復(fù)消費(fèi)之后,怎么保證冪等性。

給你舉個(gè)例子吧。假設(shè)你有個(gè)系統(tǒng),消費(fèi)一條往數(shù)據(jù)庫里插入一條,要是你一個(gè)消息重復(fù)兩次,你不就插入了兩條,這數(shù)據(jù)不就錯(cuò)了?但是你要是消費(fèi)到第二次的時(shí)候,自己判斷一下已經(jīng)消費(fèi)過了,直接扔了,不就保留了一條數(shù)據(jù)?

一條數(shù)據(jù)重復(fù)出現(xiàn)兩次,數(shù)據(jù)庫里就只有一條數(shù)據(jù),這就保證了系統(tǒng)的冪等性

冪等性,我通俗點(diǎn)說,就一個(gè)數(shù)據(jù),或者一個(gè)請求,給你重復(fù)來多次,你得確保對應(yīng)的數(shù)據(jù)是不會改變的,不能出錯(cuò)。

那所以第二個(gè)問題來了,怎么保證消息隊(duì)列消費(fèi)的冪等性?

?

其實(shí)還是得結(jié)合業(yè)務(wù)來思考,我這里給幾個(gè)思路:
  • 比如你拿個(gè)數(shù)據(jù)要寫庫,你先根據(jù)主鍵查一下,如果這數(shù)據(jù)都有了,你就別插入了,update一下好吧。
  • 比如你是寫redis,那沒問題了,反正每次都是set,天然冪等性。
  • 比如你不是上面兩個(gè)場景,那做的稍微復(fù)雜一點(diǎn),你需要讓生產(chǎn)者發(fā)送每條數(shù)據(jù)的時(shí)候,里面加一個(gè)全局唯一的id,類似訂單id之類的東西,然后你這里消費(fèi)到了之后,先根據(jù)這個(gè)id去比如redis里查一下,之前消費(fèi)過嗎?如果沒有消費(fèi)過,你就處理,然后這個(gè)id寫redis。如果消費(fèi)過了,那你就別處理了,保證別重復(fù)處理相同的消息即可。
  • 還有比如基于數(shù)據(jù)庫的唯一鍵來保證重復(fù)數(shù)據(jù)不會重復(fù)插入多條,我們之前線上系統(tǒng)就有這個(gè)問題,就是拿到數(shù)據(jù)的時(shí)候,每次重啟可能會有重復(fù),因?yàn)閗afka消費(fèi)者還沒來得及提交offset,重復(fù)數(shù)據(jù)拿到了以后我們插入的時(shí)候,因?yàn)橛形ㄒ绘I約束了,所以重復(fù)數(shù)據(jù)只會插入報(bào)錯(cuò),不會導(dǎo)致數(shù)據(jù)庫中出現(xiàn)臟數(shù)據(jù)。

    如何保證MQ的消費(fèi)是冪等性的,需要結(jié)合具體的業(yè)務(wù)來看。

    轉(zhuǎn)載于:https://www.cnblogs.com/tuhooo/p/10564558.html

    總結(jié)

    以上是生活随笔為你收集整理的如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 香蕉视频黄在线观看 | 国产精品作爱 | 三年在线观看视频 | 国产一区二区三区视频在线 | 国产l精品国产亚洲区久久 午夜青青草 | ,亚洲人成毛片在线播放 | 日韩一级黄色片 | 妺妺窝人体色www在线下载 | 禁网站在线观看免费视频 | 久久一区二区三区四区五区 | 奇米狠狠去啦 | 伊人三级 | 中文字幕一区二区三区5566 | av在线色 | 欧美一区二区三区影视 | 日韩精品一区二区三区不卡 | 欧美xxxx少妇| 五月天黄色网址 | 国产第九页 | 欧美极品少妇xxxxⅹ猛交 | 69精品国产 | 一区二区三区伦理 | 老司机精品视频在线播放 | 激情网av | 97视频一区| 国产一级二级毛片 | a√天堂资源在线 | 蜜臀久久精品久久久用户群体 | 手机在线观看免费av | 美女又爽又黄免费 | 波多野结衣国产 | 欧美日韩免费 | 日韩无套无码精品 | 午夜少妇av | 黄色一级免费看 | 亚洲人成色777777老人头 | 欧美黑人添添高潮a片www | 国语播放老妇呻吟对白 | 永久免费看片 | 国产人妖视频 | 日本高清免费aaaaa大片视频 | 九九热在线播放 | 欧美xxxx吸乳 | 狠狠操狠狠爱 | 亚洲欧美日韩国产 | 国产激情自拍 | 永久av免费在线观看 | 国产成人在线观看 | av高潮| 久久网免费视频 | 国产亚洲在线 | 亚洲干综合| 色狠狠一区二区三区 | 成人妇女淫片aaaa视频 | 欧美精品黄 | 国产a一级片 | 久久久久久无码午夜精品直播 | 天堂av2024| 红杏出墙记| 国产精品18久久久久久vr下载 | 久草国产在线视频 | www.97av| 亚洲一级影院 | 国产一区免费观看 | 亚洲欧美日韩另类在线 | 欧美另类在线视频 | 国产亚洲制服 | 91超碰在线 | 蜜桃av噜噜一区二区三区麻豆 | 亚洲欧美国产精品 | 琪琪在线视频 | 人妻奶水人妻系列 | 在线免费中文字幕 | 日本欧美一区 | 午夜影院一区二区 | 国产在线网站 | 国产精品后入内射日本在线观看 | 无码不卡av东京热毛片 | 青青草视频播放器 | 欧美色图一区二区三区 | 中文字幕一区av | 亚洲欧洲成人 | 亚洲少妇网站 | 美女扒开尿口给男人桶 | 婷婷激情六月 | 美女隐私免费 | 男生和女生一起差差差很痛的视频 | 欧美成人精品一区二区 | 午夜激情黄色 | 蜜臀av一区二区三区 | 四虎在线观看视频 | 日本在线视频www | 少妇又色又爽又黄的视频 | 天堂资源网 | 风间由美av| 亚洲av无码一区二区三区人 | 国产在线a | 大乳女喂男人吃奶视频 | 性网|