面試官非得跟我擡槓,說MQ掛了怎麼辦?

點擊上方藍色字體,選擇“設爲星標”


回覆”學習資料“獲取學習寶典


原創:猿天地(微信公衆號ID:cxytiandi),歡迎分享,轉載請保留出處。

 

一位讀者跟我說,最近去某個公司面試,面試官非得問他MQ掛了如何處理?這位讀者說當時也比較懵,因爲在日常工作中也沒去想過這樣的問題,就回答:掛了就報錯了唄,馬上重啓唄,還能咋處理

 

其實這個問題也並不是說這位面試官是一種擡槓的行爲,因爲MQ確實有可能掛掉,是一種正常現象。只不過是說這個掛的概率非常小,畢竟都是集羣模式。

 

如果是平時跟朋友,同事聊這個問題,怎麼回答都沒問題。如果是在面試過程中,還是得仔細想想如何去回答比較好,不能太隨意,否則面試結果可能沒那麼理想了。

 

第一步:統一封裝MQ的操作


如果MQ掛掉,勢必會影響你發消息的邏輯。我們可以仔細思考下這個問題,MQ不像數據庫,掛了就沒辦法進行任何操作了。MQ本身就是用於多系統解耦,異步處理等場景的,就算MQ掛了,也不會影響到主流程。所以這其實就相當於是一個降級的處理,沒什麼特殊的點。
 
要進行降級處理,那麼肯定得統一進行處理。不太可能每個發送消息的地方都去處理一遍,只有逗比才會去這樣做。所以第一步就需要先對MQ的操作進行統一封裝,然後在這個封裝裏面去做統一的降級邏輯,不要讓使用方去關注你的這個降級邏輯。

 

第二步:降級處理,數據存儲


降級可以有兩種方式,一種是將要發送的消息存儲到數據庫中,另一種就是直接寫本地磁盤。

 

寫數據庫


寫數據庫相對來說比較簡單,本身程序中都會用到數據庫,這個時候只需要單獨加一張表即可。當消息發送異常的時候,將消息進行存儲。
 

寫磁盤

寫磁盤跟數據庫的作用是一樣,寫磁盤相對來說更加獨立,不依賴數據庫。不好的點在於寫磁盤還得考慮寫入的格式,比如消息量大要不要分多個文件寫入之類的問題,整體需要考慮的點比數據庫要多。
 

寫日誌

寫日誌可能是最簡單的方式了,但是在後期消息補發的時候就需要人工介入,將失敗的消息撈出來然後重新發送。

 

第三步:重發消息

可以單獨起一個定時任務,週期性的去將這些失敗存儲的消息進行重發,如果你的MQ服務故障後幾分鐘就恢復了,那麼重試的時候消息就能夠成功發出去了。
 
也可以人工處理,最重要的是當MQ故障的時候,消息發送不出去,這些消息要存儲起來,不能丟失,這纔是重點。
 
完整流程如下:

 

 

總結

本文只是給大家提供一些思路,實際上對任何中間件的依賴都需要考慮異常情況,如何回退。當然還有最重要的就是監控,在故障後及時發現問題,快速修復。然後再加上兜底的回退邏輯將發送失敗的消息重新發送,保證業務的完整性。
 
思路比編碼更重要,如果對你有用,來個轉發唄!
 
關於作者:尹吉歡,簡單的技術愛好者,《Spring Cloud微服務-全棧技術與案例解析》, 《Spring Cloud微服務 入門 實戰與進階》作者, 公衆號 猿天地 發起人。



   
   
   

後臺回覆 學習資料 領取學習視頻



點贊和在看就是最大的支持❤️

本文分享自微信公衆號 - 猿天地(cxytiandi)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章