RabbitMQ的幾種交換器-----區別和特點

說明:本文屬於半轉載,內部有自己的總結;

簡介:

RabbitMQ中,所有生產者提交的消息都由Exchange來接受,然後Exchange按照特定的策略轉發到Queue進行存儲
RabbitMQ提供了四種Exchange:fanout,direct,topic,header
header模式在實際使用中較少,本文只對前三種模式進行比較,除了其匹配規則是匹配header中的參數外,其餘的和direct很相似,但是性能相差甚遠。

一.Direct Exchange

在這裏插入圖片描述
任何發送到Direct Exchange的消息都會被轉發到RouteKey中指定的Queue。

  1. 一般情況可以使用rabbitMQ自帶的Exchange:””(該Exchange的名字爲空字符串,下文稱其爲default Exchange)。
  2. 這種模式下不需要將Exchange進行任何綁定(binding)操作
  3. 消息傳遞時需要一個“RouteKey”,可以簡單的理解爲要發送到的隊列名字。
  4. 如果vhost中不存在RouteKey中指定的隊列名,則該消息會被拋棄。

一些說明:

  1. 實現 指定類型的消息只能被部分隊列消費, 我們可以通過direct的routingkey 在綁定交換機和隊列的時候 指定消息傳遞的路徑;
  2. 相較於topic-exchange ,direct-exchange有一個缺點:routingkey 路由 只能完全匹配;

二.Fanout Exchange

在這裏插入圖片描述
任何發送到Fanout Exchange的消息都會被轉發到與該Exchange綁定(Binding)的所有Queue上。

  1. 可以理解爲路由表的模式
  2. 這種模式不需要RouteKey
  3. 這種模式需要提前將Exchange與Queue進行綁定,一個Exchange可以綁定多個Queue,一個Queue可以同多個Exchange進行綁定。
  4. 如果接受到消息的Exchange沒有與任何Queue綁定,則消息會被拋棄。

一些說明:

  1. 可以有多個消費者,但是隻有一個消費者可以消費成功;
  2. 扇形交換器,無腦的廣播消息給所有與之綁定的隊列;
  3. 聲明一個交換機,其中倆參數說明:
    (1)durable:是否持久化,如果true,則當前RabbitMQ重啓的時候,它依舊存在
    (2)autoDelete:當沒有生成者/消費者使用此交換機時,此交換機會被自動刪除。
  4. 聲明代碼:
// 聲明一個fanout交換機
channel.exchangeDeclare(EXCHANGE_NAME,BuiltinExchangeType.FANOUT, false, false, null);
// 發送消息
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
  1. 扇形交換機的消息傳遞是 只要綁定了這個交換機 就可以消費消息,所以Routingkey沒有用;

三.Topic Exchange

在這裏插入圖片描述
任何發送到Topic Exchange的消息都會被轉發到所有關心RouteKey中指定話題的Queue上

  1. 這種模式較爲複雜,簡單來說,就是每個隊列都有其關心的主題,所有的消息都帶有一個“標題”(RouteKey),Exchange會將消息轉發到所有關注主題能與RouteKey模糊匹配的隊列。
  2. 這種模式需要RouteKey,也許要提前綁定Exchange與Queue。
  3. 在進行綁定時,要提供一個該隊列關心的主題,如“#.log.#”表示該隊列關心所有涉及log的消息(一個RouteKey爲”MQ.log.error”的消息會被轉發到該隊列)。
  4. “#”表示0個或若干個關鍵字,“”表示一個關鍵字。如“log.”能與“log.warn”匹配,無法與“log.warn.timeout”匹配;但是“log.#”能與上述兩者匹配。

一些說明:

  1. 路由鍵中特殊匹配字符說明
    (1)*(星號)可以代替一個字。
    (2)#(散列)可以代替零個或多個單詞。
  2. 路由鍵條件:
    (1)必須由英文字符組成,使用“.”號隔開;
    (2)路由鍵的長度 最長255字節;
5.同樣,如果Exchange沒有發現能夠與RouteKey匹配的Queue,則會拋棄此消息。

版權聲明:本文爲CSDN博主「道秋adol」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chendaoqiu/article/details/48440633

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章