1、為什么要使用消息隊列?
(1)解耦
傳統模式的缺點:系統間耦合性太強,如上圖所示,系統A在代碼中直接調用系統B和系統C的代碼,如果將來D系統接入,系統A還需要修改代碼,過於麻煩!
中間件模式:將消息寫入消息隊列,需要消息的系統自己從消息隊列中訂閱,從而系統A不需要做任何修改。
(2)異步
傳統模式缺點:一些非必要的業務邏輯以同步的方式運行,太耗時間。
中間件模式:將消息寫入消息隊列,非必要的業務邏輯以異步的方式運行,以加快響應速度
(3)削峰
傳統模式缺點:並發量大的時候,所有的請求直接懟到數據庫,造成數據庫連接異常
中間件模式:系統A慢慢的按照數據庫能處理的並發量,從消息隊列中慢慢拉取消息。在生產中,這個短暫的高峰期積壓是允許的。
2、使用了消息隊列會有什么缺點?
分析:一個使用了MQ的項目,如果連這個問題都沒有考慮過,就把MQ引進去了,那就給自己的項目帶來了風險。我們引入一個技術,要對這個技術的弊端有充分的認識,才能做好防御。
系統的可用性降低:如果消息隊列掛了,那么系統也會受到影響
系統的復雜性增加:要多考慮很多方面的問題,比如一致性問題、如何保證消息不被重復消費,如何保證消息可靠傳輸。因此,需要考慮的東更多,系統的復雜性增大。