RabbitMQ ——整體架構
一 .概述
從整體上講Rabbitmq就是一個生產者消費者的模型.
我們將中間的整個broker就當做是一個訊息中介軟體的實體就可以了.
單從這個方面上講,生產者傳送訊息到broker上面,然後消費者從broker之中獲取資料,最終完成資料的通訊任務.
二 .broker的結構
我們的一個Rabbitmq可以稱為是一個broker,我們一般情況下就當做是一個訊息中介軟體的例項.
人為的,Rabbitmq將整個Broker劃分成多個Vhosst,我們可以認為是一個一個的邏輯的空間,這些邏輯空間之間是相互隔離的.
我們一般情況下,在一次的生產和消費的過程之中只會使用一個Vhost.
三 .Vhost的結構
在上面我們說到Vhost是一個邏輯的空間,在這個邏輯的空間之中存在大量的exchange和queue,首先我們不去管exchange和queue之間是怎麼連線的.
也就是說,我們只要知道一個vhost就是儲存一堆的exchange和queue的儲存空間就可以 了.
四 .exchange
和其它的訊息中間的最大區別,就是在amqp協議之中的exchange的概念,我們現在可以將exchange當做是一個轉發的代理.
它本身僅僅提供的功能就是幫助實現路由的轉換,幫助將訊息轉發到對應的訊息佇列上面.
在下面我們會說交換機的型別的概念,這是一個比較複雜的概念.
五 .訊息佇列
訊息佇列就是最終儲存訊息的地方,也是整個訊息中介軟體之中最為重要的一個地方,訊息佇列和消費者聯絡,決定消費者到底能夠獲取到什麼樣的訊息.
多個消費者可以訂閱一個佇列的內容,但是佇列會按照輪詢的方式進行訊息的傳送,我們在後面有辦法改變這樣的行為.
六 . 聯絡
現在我們需要說明在整個Rabbitmq之中最為複雜的一個概念,路由鍵,繫結建和繫結的概念了.
我們首先可以這樣理解繫結,繫結就是建立聯絡,但是繫結是否生效需要看路由鍵和繫結建的設定情況.
在介紹具體的聯絡之前,我們需要對exchange的型別做一個瞭解.
七.exchange的型別
在Rabbitmq之中,現在一般可以劃分成四種類型,這四種類型我們稱為Rabbitmq最基本的型別.
[1]direct型別:
在上面的圖中,描述了一個direct型別的exchange.
對於direct型別的交換機,它只會講訊息交給路由鍵和訊息佇列一致的訊息佇列.
比如,上面的圖中定義了多個繫結,當傳送
路由鍵為info的訊息的時候,訊息會被路由到佇列2上面.
路由鍵為waring的訊息的時候,訊息就會被路由到佇列1和佇列2上面.
從這個上面,我們也能夠知道傳送一個訊息我們需要制定一個交換機,然後制定一個路由鍵.
然後互動機會根據自己的型別和訊息中附帶的路由鍵找到對應的訊息佇列,是否真正的傳送需要和繫結建進行比對.
比如上面的圖中,我們知道交換機和訊息佇列進行了繫結,繫結的規則定義了4中,但是僅僅只有兩個關係.
[2]fanout型別
fanout型別是一個最直接的型別,只要訊息到達這樣的互動機,它上面都不管,只要有佇列和我有聯絡,我就將訊息交給他.
如上圖,一個訊息到達了交換機,它上面都不管,直接將訊息交給了有連線的佇列之中.
[3]topic交換機
這種互動機比較器之前的型別,就是多了一個模糊匹配的功能.
在Rabbitmq之中,使用了#和*代表模糊查詢的佔位符.
其中:#表示多個單詞 ,*表示一個單詞.
我們看看上面圖:
當我們的訊息的路由鍵的值為usa.news,那麼訊息可以成功了路由到佇列1和佇列2.
當為usa.weather的時候,會路由到佇列1佇列3.