什麼是消息隊列(MQ)

一、什麼是消息隊列(MQ,Message Queue)

通俗理解就是消息用隊列的模式發送,把要傳輸的數據放在隊列中。圖中綠色產生Message的叫做生產者,黃色的從隊列裏取出Message的叫做消費者

 

二、爲什麼要用消息隊列

1.解耦

系統中存在,A,B,C三個系統。A能夠產生一個ID,B,C需要從A中得到一個ID。

 

但是隨着應用發展,更多的系統需要去A中取得ID這個數據,A需要在系統上調用對應需要數據的系統的接口,也有很多系統不斷下線不需要從A中取得ID這個數據。每一次增加減少消耗數據的系統都需要在A上新建刪除一個對應的接口,對於沒有調用成功的還需要選擇 返回fai l還是 繼續重試。最後A系統的負責人在一次次增刪下抵不住壓力就跑路了。。。

 

但是有了消息隊列就不一樣了,像開始的圖顯示,A系統只需要把數據寫到消息隊列中,讓其他系統自己來消息隊列裏取就行了。好處就是:

1.系統A只需要寫入數據到隊列中,不需要關心誰來取這個數據

2.其他系統不需要數據時,不需要更改系統A的代碼

3.取數據只跟消息隊列有關,消費者掛了跟生產者無關

這樣解耦就實現了

 

2.異步

A系統在將數據寫到消息隊裏中就可以去執行其他操作,不需要等待調用B,C系統完成的時間。

例子(簡單可能不恰當的例子):

你去飯店(這個飯店需要你先買單後給你一個號碼(系統A),拿號碼可以去廚房讓師傅燒菜(系統B),去後臺開發票(系統C)),最後你才能喫飯。之後飯店覺得這樣確實不妥,就增加了一個服務檯(消息隊列)接收你買單後的號碼,廚房(系統B)和後臺(系統C)只需要去服務檯拿到你的號碼他們就做菜開發票,你可以直接等着喫飯。這樣你的時間就大大節省了。

例子有點不恰當,道理是這個道理。

 

3.削峯/限流

還是上面的例子,沒有服務檯(消息隊列)之前。如果有許多顧客來喫飯,那就需要在廚房(系統B)和後臺(系統C)排起長隊,廚房(系統B)和後臺(系統C)最後處理不過來最後不幹了(無法營業)。如果有了服務檯(消息隊列),只需要服務檯收到你的號碼等後臺和廚房處理就行了。廚房和後臺可以管控處理速度(雖然顧客等的時間會硬氣顧客不滿意,但至少店還能開得下去繼續營業

三、使用消息隊列需要解決什麼問題

1.高可用

這個是所有服務都會遇到的問題,如果不做高可用消息隊列一炸,整個系統也不能運行了。使用消息隊列的時候選擇集羣式,分佈式的搭建方法,提高MQ的高可用。

2.數據丟失

需要把消息隊列中的消息存放在哪裏?內存,服務器掛掉了就沒有了。硬盤持久化的話,需要實時同步到硬盤還是異步到硬盤存儲?

3.消費者如何得到隊列的數據

是直接去最新的還是按順序看有沒有需要的新的數據?

4.消息重複消費問題

5.保證消息隊列的絕對順序

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