rabbitmq++:rabbitmq 三種常用的交換機


更多 rabbitmq 介紹

首先先介紹一個簡單的一個消息推送到接收的流程,提供一個簡單的圖:

 

黃色的圈圈就是我們的消息推送服務,將消息推送到 中間方框里面也就是 rabbitMq的服務器;

然后經過服務器里面的交換機、隊列等各種關系(后面會詳細講)將數據處理入列后,最終右邊的藍色圈圈消費者獲取對應監聽的消息。

常用的交換機有以下三種,因為消費者是從隊列獲取信息的,隊列是綁定交換機的(一般),所以對應的消息推送/接收模式也會有以下幾種:

Direct Exchange :

  直連型交換機,根據消息攜帶的路由鍵將消息投遞給對應隊列。

  大致流程,有一個隊列綁定到一個直連交換機上,同時賦予一個路由鍵 routing key 。

  然后當一個消息攜帶着路由值為X,這個消息通過生產者發送給交換機時,交換機就會根據這個路由值X去尋找綁定值也是X的隊列。

Fanout Exchange:

  扇型交換機,這個交換機沒有路由鍵概念,就算你綁了路由鍵也是無視的。 這個交換機在接收到消息后,會直接轉發到綁定到它上面的所有隊列。

Topic Exchange:

  主題交換機,這個交換機其實跟直連交換機流程差不多,但是它的特點就是在它的路由鍵和綁定鍵之間是有規則的。

簡單地介紹下規則:

*  (星號) 用來表示一個單詞 (必須出現的)

#  (井號) 用來表示任意數量(零個或多個)單詞

通配的綁定鍵是跟隊列進行綁定的,舉個小例子

隊列Q1 綁定鍵為 *.TT.*          隊列Q2綁定鍵為  TT.#
如果一條消息攜帶的路由鍵為 A.TT.B,那么隊列Q1將會收到;
如果一條消息攜帶的路由鍵為TT.AA.BB,那么隊列Q2將會收到;

 

主題交換機是非常強大的,為啥這么膨脹?

當一個隊列的綁定鍵為 "#"(井號) 的時候,這個隊列將會無視消息的路由鍵,接收所有的消息。

當 * (星號) 和 # (井號) 這兩個特殊字符都未在綁定鍵中出現的時候,此時主題交換機就擁有的直連交換機的行為。

所以主題交換機也就實現了扇形交換機的功能,和直連交換機的功能。

另外還有 Header Exchange 頭交換機 ,Default Exchange 默認交換機,Dead Letter Exchange 死信交換機。

 


免責聲明!

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



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