消息隊列mq的作用
現(xiàn)在的系統(tǒng)都是拆分成多個模塊,模塊直接需要相互調(diào)用來完成協(xié)作。比如商城系統(tǒng),用戶下單時,需要跟訂單系統(tǒng),庫存系統(tǒng),物流系統(tǒng)等多個系統(tǒng)打交道。而且后續(xù)還需要添加更多的系統(tǒng)。
歡迎關(guān)注公眾號:Java面試教程 ,回復(fù)關(guān)鍵字qqq,領(lǐng)取2023面試大全資料?

這樣會導(dǎo)致兩個問題
調(diào)用系統(tǒng)太多,訂單系統(tǒng)成功了,但是調(diào)用物流系統(tǒng)失敗,需要多次重試調(diào)用該系統(tǒng)直到成功,或者回滾訂單系統(tǒng),返回用戶重試,這樣導(dǎo)致響應(yīng)時間長,且系統(tǒng)設(shè)計復(fù)雜
如果后續(xù)需要添加更多的系統(tǒng),需要改造訂單系統(tǒng),不符合系統(tǒng)設(shè)計的開閉原則
引入mq消息中間件后
用戶下訂單后,訂單系統(tǒng)發(fā)送下單成功消息到mq就返回響應(yīng)給用戶了,其他系統(tǒng)通過訂閱消息topic來消費消息,執(zhí)行各自的業(yè)務(wù)邏輯。
依賴mq消息不丟失,可確保其他系統(tǒng)一定會調(diào)用成功,解決了第一個問題;
如果需要添加更多系統(tǒng)交互,只需要訂閱消息的topic,就能消費下單成功的消息,不需要改動到訂單系統(tǒng),解決了第二個問題。
這樣引入了消息隊列中間件之后,就和其他系統(tǒng)解耦了。

二.異步
系統(tǒng)由多個模塊組成時,用戶一個請求,往往需要調(diào)用多個模塊才能返回響應(yīng)。這樣會導(dǎo)致用戶響應(yīng)變慢。如下圖,調(diào)用方式如果是同步的,用戶需要等待16s才能得到響應(yīng)結(jié)果。

引入了mq中間件后
請求A系統(tǒng)+投遞消息到消息隊列約1s,B系統(tǒng)和C系統(tǒng)異步消費mq消息,這樣可以大大縮短響應(yīng)時間,提高系統(tǒng)的吞吐量,性能可以大大的提高。

三.削峰填谷
我們在搞秒殺活動時,往往會影響大量的用戶同時請求下單,這樣如果超過了訂單系統(tǒng)的可承受訪問,就會把系統(tǒng)壓垮,導(dǎo)致用戶無法下單。

引入了mq中間件后
用戶請求先生產(chǎn)消息,發(fā)送到mq,由訂單系統(tǒng)消費mq消息,來處理用戶下單請求,下單請求完成時,通過短信方式通知用戶。
