關於RabbitMQ交換機的理解


RabbitMQ是實現AMQP(高級消息隊列協議)的消息中間件的一種,最初起源於金融系統,用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。
 

      消息(Message)由Client發送,RabbitMQ接收到消息之后通過交換機轉發到對應的隊列上面。Worker會從隊列中獲取未被讀取的數據處理。

 

交換機

 

RabbitMQ包含四種不同的交換機類型:

Direct exchange:直連交換機,轉發消息到routigKey指定的隊列

Fanout exchange:扇形交換機,轉發消息到所有綁定隊列(速度最快)

Topic exchange:主題交換機,按規則轉發消息(最靈活)

Headers exchange:首部交換機 (未接觸)

 

Fanout扇形交換機

 

          扇形交換機是最基本的交換機類型,它做的事情很簡單--廣播信息。Fanout交換機會把接收到的消息全部轉發到綁定的隊列上。因為廣播不需要“思考”,所以Fanout交換機是四種交換機中速度最快的。

 

適用場景:需要隨時增加減少業務處理的隊列,例如注冊、下單等功能需要增加送積分功能,只需要增加一個綁定到交換機的隊列去處理新業務,無需修改舊的業務邏輯,從而達到業務解耦,非常容易擴展。

 

Direct直連交換機:

 

           直連交換機是一種帶路由功能的交互機,一個隊列通過routing_key與一個交換機綁定,當消息被發送的時候,需要指定一個routing_key,這個消息被送達交換機的時候,就會被交換機送到指定的隊列里面去。同樣一個routing_key也是支持應用到多個隊列中的,當一個交換機綁定多個隊列時,消息就會被送到對應的隊列去處理。

 

 適用場景:有優先級的任務,根據任務的優先級把消息發送到對應的隊列,這樣可以指派更多的資源去處理高優先級的隊列。

 

Topic主題交換機:

 

 直連交換機的routing_key方案非常簡單,如果我們希望一條消息發送給多個隊列,那么這個交換機需要綁定上非常多的routing_key,假設每個交換機上都綁定一堆的routing_key連接到各個隊列上。那么消息隊列的管理就會異常的困難。

 

所以RabbitMQ提供了一種主題交換機,發送到主題交換機上的消息需要攜帶指定規則的routing_key,主題交換機會根據這個規則將數據發送到對應的(多個)隊列上。

 

主題交換機的routing_key需要有一定的規則,交換機和隊列的binding_key需要采用*.#.*.....的格式,每個部分用.分開,其中:

*表示一個單詞

#表示任意數量(零個或多個)單詞。

 

假設有一條消息的routing_key為fast.rabbit.white,那么帶有這樣binding_key的幾個隊列都會接收這條消息:

 

fast..

..white

fast.#

……

下圖來源於網上,感覺對主題交換機的描述比較到位:

 

適用場景:消息需要基於多重條件進行路由到達對應隊列,例如:日志系統,不僅可以根據日志的級別而且能根據日志的來源進行訂閱。
---------------------
作者:yeomenChan
來源:CSDN
原文:https://blog.csdn.net/u011466674/article/details/51971180?utm_source=copy
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM