1. 程式人生 > 其它 >整理RabbitMQ介紹

整理RabbitMQ介紹

RabbitMQ介紹

使用Erlang語言實現的訊息中介軟體,用於在分散式系統中儲存轉發訊息。

RabbitMQ模型

RabbitMQ 整體上是一個生產者與消費者模型,主要負責接收、儲存和轉發訊息。可以把訊息傳遞的過程想象成:當你將一個包裹送到郵局,郵局會暫存並最終將郵件通過郵遞員送到收件人的手上,RabbitMQ就好比由郵局、郵箱和郵遞員組成的一個系統。從計算機術語層面來說,RabbitMQ 模型更像是一種交換機模型。

生產者與消費者

生產者 Producer

生產訊息的一方

消費者 Consumer

使用訊息的一方

交換機

交換機 Exchange

交換機接收生產者傳送的訊息並將這些訊息路由到佇列中。

在RabbitMQ中,訊息並不是直接被投遞到訊息佇列中的,中間還必須經過交換機這一層,交換機會把我們的訊息分配到對應的訊息佇列中。

交換機有四種類型,不同型別對應不同的路由策略。

direct、fanout、topic、headers

路由鍵、繫結鍵

生產者發訊息給交換機的時候,一般會指定一個路由鍵 RoutingKey,用來指定這個訊息的路由規則,而這個RoutingKey需要與交換機型別和繫結鍵 BindingKey聯合使用才能最終生效。

RabbitMQ中通過 繫結 Binding 將交換機和訊息佇列關聯起來,在繫結的時候一般會指定一個繫結鍵,這樣RabbitMQ就知道如何正確將訊息路由到隊列了。如下圖:

一個繫結就是基於路由鍵將交換器和訊息佇列連線起來的路由規則,所以可以將交換器理解成一個由繫結構成的路由表。Exchange 和 Queue 的繫結可以是多對多的關係。

生產者將訊息傳送給交換器時,需要一個RoutingKey,當 BindingKey 和 RoutingKey 相匹配時,訊息會被路由到對應的佇列中。在繫結多個佇列到同一個交換器的時候,這些繫結允許使用相同的 BindingKey。BindingKey 並不是在所有的情況下都生效,它依賴於交換器型別,比如fanout型別的交換器就會無視,而是將訊息路由到所有繫結到該交換器的佇列中。

訊息佇列

訊息佇列Queue 用來儲存訊息,直到訊息傳送給消費者。

訊息佇列是訊息的容器,一個訊息可投入一個或多個佇列中。

RabbitMQ中,訊息只能儲存在佇列中,這一點和Kafka相反。Kafka將訊息儲存在 topic(主題) 這個邏輯層面,而相對應的佇列邏輯只是topic實際儲存檔案中的位移標識。

多個消費者可以訂閱一個佇列,佇列中的訊息會被輪詢分配(Round-Robin)給多個消費者進行處理,而不是每個消費者都收到所有的訊息並處理,這樣可以避免訊息被重複消費。

RabbitMQ不支援佇列層面的廣播消費。

Broker服務節點

一個RabbitMQ Broker可以簡單地看作一個 RabbitMQ 服務節點,或者RabbitMQ服務例項。大多數情況下也可以將一個RabbitMQ Broker看作一臺 RabbitMQ 伺服器。

下圖展示了生產者將訊息存入 RabbitMQ Broker,以及消費者從Broker中消費資料的整個流程。

交換機型別

direct

不指定交換機型別時,預設位direct。

路由規則:把訊息路由到那些 Bindingkey 與 RoutingKey 完全匹配的 Queue中。如下圖:

你應當熱愛自由!
作者:Leejk,轉載請註明原文連結:https://www.cnblogs.com/leejk/p/15103829.html