mq避免消息重復(fù)消費(fèi) JAVA面試如何保證消息不被重復(fù)消費(fèi)?如何保證消息消費(fèi)的冪等性?
JAVA面試如何保證消息不被重復(fù)消費(fèi)?如何保證消息消費(fèi)的冪等性?我是閑著沒事干,來(lái)這里玩的,開始在各個(gè)網(wǎng)絡(luò)找技術(shù)資料,后就以《頭條》為主了。由找資料轉(zhuǎn)向了交朋友了。因?yàn)槲蚁氲臇|西落后了時(shí)代,有些的想的
JAVA面試如何保證消息不被重復(fù)消費(fèi)?如何保證消息消費(fèi)的冪等性?
我是閑著沒事干,來(lái)這里玩的,開始在各個(gè)網(wǎng)絡(luò)找技術(shù)資料,后就以《頭條》為主了。由找資料轉(zhuǎn)向了交朋友了。因?yàn)槲蚁氲臇|西落后了時(shí)代,有些的想的,由于自己程度不高。在腦子里只是勾思,達(dá)不到實(shí)際?。?!
高并發(fā)場(chǎng)景下,如何保證生產(chǎn)者投遞到消息中間件的消息不丟失?
消息中間件消息不丟失主要從以下幾個(gè)方面考慮
投遞
生產(chǎn)者向消息中間件投遞消息是push的方式,這種方法會(huì)出現(xiàn)以下情況
1、生產(chǎn)者掛掉了
情況是這樣的,你的生產(chǎn)者收到了數(shù)據(jù),并存到了數(shù)據(jù)庫(kù)中,同時(shí)生產(chǎn)者要降消息push到消息中間件做異步處理。這時(shí)候如果生產(chǎn)者掛掉了,就導(dǎo)致消息數(shù)據(jù)沒有push到消息中間件里,也就會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題。
這時(shí)候我們可以在數(shù)據(jù)庫(kù)設(shè)置是否投遞成功標(biāo)志位,在生產(chǎn)者push之后,再將標(biāo)志位設(shè)置為已經(jīng)投遞。另外,客氣啟動(dòng)一個(gè)定時(shí)任務(wù),檢測(cè)是否有消息沒有投遞,保證消息數(shù)據(jù)一定會(huì)進(jìn)入中間件。
2、消息重試
生產(chǎn)者沒有掛掉,但是因?yàn)榫W(wǎng)絡(luò)等其他問(wèn)題,導(dǎo)致生產(chǎn)者不知道有沒有投遞成功。這時(shí)候生產(chǎn)者可以失敗重試,這保證消息可以再次投遞。但是這有可能會(huì)出現(xiàn)重復(fù)投遞,導(dǎo)致出現(xiàn)中間件消息數(shù)據(jù)重復(fù)。
存儲(chǔ)
消息中間件是存到磁盤上的,存入磁盤的消息一般是不會(huì)丟失的,同時(shí)磁盤文件還會(huì)做備份。如果一個(gè)丟失了,可以通過(guò)備份文件恢復(fù)。
消費(fèi)
一般消費(fèi)者需要在消費(fèi)者消費(fèi)成功之后再設(shè)置提交消費(fèi)位點(diǎn)。如果消費(fèi)失敗,消費(fèi)者不提交消費(fèi)位點(diǎn)還是可以消費(fèi)該數(shù)據(jù)的。這就引出一個(gè)問(wèn)題就是消息重復(fù)消費(fèi)。這個(gè)問(wèn)題和上邊提到的消息重復(fù)投遞相同,都會(huì)導(dǎo)致重復(fù)消費(fèi),這就需要考慮消費(fèi)的冪等性,可以做消費(fèi)記錄,防止重復(fù)消費(fèi)。
為什么使用mq?
謝謝邀請(qǐng)回答:
抱歉,不太領(lǐng)會(huì)問(wèn)答題的真正含義,無(wú)法答辯。諒解!
精通spring全家桶,被15家公司拒絕,大專程序員出路在哪?
看你的情況,說(shuō)明你對(duì)自己還是比較自信,認(rèn)為自己卻掌握了比較全方位的技術(shù),但是在面試過(guò)程中你屢屢碰壁,連續(xù)被多家單位和企業(yè)拒絕,拋開他們是否有眼光不說(shuō),這其中肯定有你自己的問(wèn)題。建議你在以下幾個(gè)方面,查找自己面試過(guò)程中的不足。
1.是否把你的能力真正的展示出來(lái)了。
作為技術(shù)員而言,學(xué)歷是一個(gè)方面,可以作為一個(gè)參考,但并不是最重要,最重要的是有實(shí)打?qū)嵉募夹g(shù)。企業(yè)需要的是能夠解決問(wèn)題的技術(shù)員,而不是需要學(xué)歷高的技術(shù)員,這一點(diǎn)是很肯定的,所以你不必過(guò)于在意自己學(xué)歷不高的問(wèn)題。如果是要需要學(xué)歷撐門面的話,本科研究生或許都什么用,至少也要找一個(gè)專家來(lái)?yè)伍T面。所以,很有可能是在你在面試的過(guò)程中,你并沒有把自己的能力真正的完全的展示出來(lái)。
2.是否有自己的代表作品。
企業(yè)在面試的過(guò)程中,通常都會(huì)與應(yīng)聘者進(jìn)行溝通,但是這些溝通都比較宏觀,也是一種感性的認(rèn)識(shí)。你在面試的過(guò)程中,除了你介紹自己的技術(shù)全面之外,如果你能夠拿出自己具有代表性的作品,那么可以增強(qiáng)你的說(shuō)服力,大大增加自己應(yīng)試的籌碼。
3.是否對(duì)自己的工作經(jīng)歷進(jìn)行了系統(tǒng)梳理。
企業(yè)招聘人員的時(shí)候,要在短時(shí)間認(rèn)識(shí)和了解一個(gè)人,本身這是一項(xiàng)難度很高的事情,所以給每個(gè)應(yīng)聘者的時(shí)間并不是很多。那么,你在面試之前,要對(duì)自己的工作經(jīng)歷,取得的業(yè)績(jī)或成果,對(duì)未來(lái)的發(fā)展設(shè)想,進(jìn)行系統(tǒng)全面的梳理,以便于更高效的與相關(guān)的招聘人員進(jìn)行溝通。不能以為自己是理工科類別,干的是技術(shù)活,就不需要梳理和總結(jié)。
祝你能早日找到滿意的工作。
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
1.先上圖,明確一個(gè)消息發(fā)送和消費(fèi)的流程
2.消息消息首先需要定義消息協(xié)議,比如ActiveMQ,Stomp,XMPP等
3.消息協(xié)議定義好了,明確消息隊(duì)列需要滿足什么場(chǎng)景
是否需要保證消息可靠性,如果需要就要做存儲(chǔ)的高可用
是否需要支持同步和異步消息
是否需要保證消息的順序
是否需要支持延時(shí)消息
具體可以參照很多開源實(shí)現(xiàn)的特性,比如RocketMQ就是高可靠的,Kafka就是高吞吐量的,但是不是高可靠的。