消息隊列筆記

1、定義

比較官方的說法是是指利用 高效可靠 的 消息傳遞機制 進行與平臺無關的 數據交流,並基於 數據通訊 來進行分佈式系統的集成。
咱們能夠理解爲將要傳輸的數據放在一個隊列中。服務器

2、爲何使用消息隊列

一、解耦
(1)發送者和接收者沒必要了解對方,只須要確認消息便可
好比在交易系統中,支付系統把支付結果放到消息中間件中,而後通知訂單系統修改支付狀態,這一過程當中支付系統和訂單系統是互不關心的,可是能夠保證數據的最終一致異步

二、異步處理分佈式

![圖片上傳中...]post

從圖中咱們能夠看見,A系統將消息發送到消息隊列後能夠當即返回,而後去處理其餘事情,而不用管BCD,讓他們本身去拿,這也就實現了異步處理。中間件

三、流量削峯
這一點也很好理解,好比如今是用戶使用的高峯期,一秒鐘有3000條請求,可是隻有兩臺服務器,每臺服務器最多隻能處理1000條,那就會形成系統的崩潰,若是說再增長一個服務器,還不夠怎麼沒辦,並且這樣會花費很多成本,所以若是用一個消息隊列,把全部請求都先放到裏面,再讓服務器本身去拿,就不會形成擁堵了,這就是所謂「削峯」。rabbitmq

![圖片上傳中...]隊列

四、廣播
使用消息隊列也能夠很好的實現廣播,若是想要發送消息給好幾個用戶,那麼若是每一個都要發一遍很是浪費效率,可是將消息放在消息隊列中,讓用戶本身去取,就很是的高效。圖片

3、使用消息隊列須要注意的問題

一、保證高可用性
在使用消息隊列的時候須要注意高可用性,最好使用分佈式或者集羣的消息隊列,覺得只把消息隊列放在一臺服務器上,那若是服務器出了問題,整個系統都崩了。路由

二、防止數據丟失
其實使用消息隊列,最須要注意的就是保證數據不丟失,因此可能須要將數據進行備份等。get

4、幾種經常使用的消息隊列技術

![圖片上傳中...]

5、經常使用消息隊列技術——rabbitmq

rabbitmq與基本的消息隊列模型不徹底同樣,而是在它的基礎上增長了一個「exchange」。

![圖片上傳中...]

(1)在圖中咱們能夠看到,exchange(交換器)接受生產者的消息並將消息路由給隊列。
(2)交換器和隊列是Binding 綁定的,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器和消息隊列鏈接起來的路由規則,因此能夠將交換器理解成一個由綁定構成的路由表
(3)在每一個消息的消息頭中都包含了路由鍵,交換器就根據路由鍵轉發消息到隊列中。
(4)exchange通常有如下4種類型:
direct:若是路由鍵和綁定鍵徹底一致,就轉發到相應的隊列。
fanout:會將消息轉發到全部的隊列中去。
topic:會將消息發送到匹配的隊列中去(使用#號和*號)。
header:header不會匹配路由鍵,而是匹配請求頭,這種類型已經不多使用了。

參考資料:https://juejin.im/post/5a67f7... 消息隊列之RabbitMQ
https://juejin.im/post/5cb025... 什麼是消息隊列
https://juejin.im/post/5b41fe... 淺談消息隊列及常見的消息中間件

相關文章
相關標籤/搜索