面試官非得跟我抬杠,說(shuō)MQ掛了怎么辦?
時(shí)間:2021-09-23 15:32:56
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]?一位讀者跟我說(shuō),最近去某個(gè)公司面試,面試官非得問(wèn)他MQ掛了如何處理?這位讀者說(shuō)當(dāng)時(shí)也比較懵,因?yàn)樵谌粘9ぷ髦幸矝](méi)去想過(guò)這樣的問(wèn)題,就回答:掛了就報(bào)錯(cuò)了唄,馬上重啟唄,還能咋處理。?其實(shí)這個(gè)問(wèn)題也并不是說(shuō)這位面試官是一種抬杠的行為,因?yàn)镸Q確實(shí)有可能掛掉,是一種正?,F(xiàn)象。只不過(guò)是...
?一位讀者跟我說(shuō),最近去某個(gè)公司面試,面試官非得問(wèn)他MQ掛了如何處理?這位讀者說(shuō)當(dāng)時(shí)也比較懵,因?yàn)樵谌粘9ぷ髦幸矝](méi)去想過(guò)這樣的問(wèn)題,就回答:掛了就報(bào)錯(cuò)了唄,馬上重啟唄,還能咋處理。?其實(shí)這個(gè)問(wèn)題也并不是說(shuō)這位面試官是一種抬杠的行為,因?yàn)镸Q確實(shí)有可能掛掉,是一種正常現(xiàn)象。只不過(guò)是說(shuō)這個(gè)掛的概率非常小,畢竟都是集群模式。?如果是平時(shí)跟朋友,同事聊這個(gè)問(wèn)題,怎么回答都沒(méi)問(wèn)題。如果是在面試過(guò)程中,還是得仔細(xì)想想如何去回答比較好,不能太隨意,否則面試結(jié)果可能沒(méi)那么理想了。?
第一步:統(tǒng)一封裝MQ的操作
如果MQ掛掉,勢(shì)必會(huì)影響你發(fā)消息的邏輯。我們可以仔細(xì)思考下這個(gè)問(wèn)題,MQ不像數(shù)據(jù)庫(kù),掛了就沒(méi)辦法進(jìn)行任何操作了。MQ本身就是用于多系統(tǒng)解耦,異步處理等場(chǎng)景的,就算MQ掛了,也不會(huì)影響到主流程。所以這其實(shí)就相當(dāng)于是一個(gè)降級(jí)的處理,沒(méi)什么特殊的點(diǎn)。?要進(jìn)行降級(jí)處理,那么肯定得統(tǒng)一進(jìn)行處理。不太可能每個(gè)發(fā)送消息的地方都去處理一遍,只有逗比才會(huì)去這樣做。所以第一步就需要先對(duì)MQ的操作進(jìn)行統(tǒng)一封裝,然后在這個(gè)封裝里面去做統(tǒng)一的降級(jí)邏輯,不要讓使用方去關(guān)注你的這個(gè)降級(jí)邏輯。?第二步:降級(jí)處理,數(shù)據(jù)存儲(chǔ)
降級(jí)可以有兩種方式,一種是將要發(fā)送的消息存儲(chǔ)到數(shù)據(jù)庫(kù)中,另一種就是直接寫(xiě)本地磁盤。?寫(xiě)數(shù)據(jù)庫(kù)
寫(xiě)數(shù)據(jù)庫(kù)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,本身程序中都會(huì)用到數(shù)據(jù)庫(kù),這個(gè)時(shí)候只需要單獨(dú)加一張表即可。當(dāng)消息發(fā)送異常的時(shí)候,將消息進(jìn)行存儲(chǔ)。?寫(xiě)磁盤
寫(xiě)磁盤跟數(shù)據(jù)庫(kù)的作用是一樣,寫(xiě)磁盤相對(duì)來(lái)說(shuō)更加獨(dú)立,不依賴數(shù)據(jù)庫(kù)。不好的點(diǎn)在于寫(xiě)磁盤還得考慮寫(xiě)入的格式,比如消息量大要不要分多個(gè)文件寫(xiě)入之類的問(wèn)題,整體需要考慮的點(diǎn)比數(shù)據(jù)庫(kù)要多。?寫(xiě)日志
寫(xiě)日志可能是最簡(jiǎn)單的方式了,但是在后期消息補(bǔ)發(fā)的時(shí)候就需要人工介入,將失敗的消息撈出來(lái)然后重新發(fā)送。?第三步:重發(fā)消息
可以單獨(dú)起一個(gè)定時(shí)任務(wù),周期性的去將這些失敗存儲(chǔ)的消息進(jìn)行重發(fā),如果你的MQ服務(wù)故障后幾分鐘就恢復(fù)了,那么重試的時(shí)候消息就能夠成功發(fā)出去了。?也可以人工處理,最重要的是當(dāng)MQ故障的時(shí)候,消息發(fā)送不出去,這些消息要存儲(chǔ)起來(lái),不能丟失,這才是重點(diǎn)。?完整流程如下:?