為什麼要使用訊息佇列?

2021-09-17 23:37:42 字數 1311 閱讀 1190

在實際的專案實踐中,訊息佇列有的使用還是比較常用的,有時在想訊息佇列的好處是什麼,使用mq能帶來什麼好處。在說之前,目前市場主流的幾種mq(activemq,rabbitmq,rocketmq,kafka),關於mq的入門就不說了,可以找下教程,寫個demo測試一下就好了,還是比較簡單的。先上張圖了解下每個mq的區別

使用訊息佇列主要起到解耦,非同步,削峰的目的。

1、解耦:

就是乙個系統或者乙個模組,呼叫了多個系統或者模組,互相之間的呼叫很複雜,維護起來很麻煩。其實這個呼叫是不需要直接同步呼叫介面的,皆可以用mq給他非同步化解耦。

2、非同步:

乙個系統接收乙個請求,需要在本地寫庫,還需要在另外幾個相關的系統寫庫都需要一定的時長。最終請求總延時是就是三者的總時長,而當使用mq非同步請求,也就是兩個時長,第乙個是建立mq,第二個是將訊息放入mq中,這樣會大大提高效率。

3、削峰

可能每個系統的早高峰不一樣,有些系統是上班期間訪問量很大,有些系統是下班時間訪問量大,所以,我們需要用mq來降低併發請求到資料庫的資料,給資料庫一定的時間去處理,不然一起擁進到資料庫,系統就會崩了。

這張圖很容易去理解,每次都需要a系統接需求去完成功能,而且a系統和其他系統之間耦合性太強了,這種情況下系統之間很容易存在問題。

使用mq進行解耦:

我在實際的專案工作當中,也在使用訊息佇列,使用訊息佇列的好處以及優勢很明顯,上面這張圖也已經描述的非常清楚了。

通過圖分析,可以得出如何去解耦。

非同步:未使用佇列之前的業務流程:

使用後: 

如果a系統和其他幾個系統進行直接呼叫,則每個系統進行業務進行,每個系統業務執行結束才可以歸結為一次呼叫結束,但是這樣的效能很低,響應時間很長,通過使用mq的可以達到非同步通知其他系統,a系統結束可以直接呼叫結束,響應時間變短,使用者體驗好。讓其他系統去消費,使用每個技術都會使得專案複雜程度增加,都會存在問題,比如使用mq會遇到什麼問題,以及解決方案,以後部落格會進行講解。 

為什麼要使用訊息佇列

參考 訊息佇列本身有確認訊息被正確消費的機制 4.2message acknowledgment訊息確認 為了保證資料不被丟失,rabbitmq支援訊息確認機制,為了保證資料能被正確處理而不僅僅是被consumer收到,那麼我們不能採用no ack,而應該是在處理完資料之後傳送ack.在處理完資料之...

為什麼要使用訊息佇列

緩衝和削峰 上游資料時有突發流量,下游可能扛不住,或者下游沒有足夠多的機器來保證冗餘,kafka在中間可以起到乙個緩衝的作用,把訊息暫存在kafka中,下游服務就可以按照自己的節奏進行慢慢處理。解耦和擴充套件性 專案開始的時候,並不能確定具體需求。訊息佇列可以作為乙個介面層,解耦重要的業務流程。只需...

為什麼要使用訊息佇列

的 個人覺得關於訊息佇列的作用的概括簡明扼要,遂摘錄至此 現代的網際網路應用大量地使用了訊息佇列 messaging 訊息佇列不僅被用於系統內部元件之間的通訊,同時也被用於系統跟其它服務之間的互動。訊息佇列的使用可以增加系統的可擴充套件性 靈活性和使用者體驗。非基於訊息佇列的系統,其執行速度取決於系...