RabbitMQ三種交換模式的效能比較

2021-12-29 22:28:27 字數 1311 閱讀 4556

rabbitmq三種交換模式的效能比較:rabbitmq中,所有生產者提交的訊息都由exchange來接受,然後exchange按照特定的策略**到queue進行儲存。

rabbitmq提供了四種exchange:fanout,direct,topic,header

header模式在實際使用中較少,本文只對前三種模式進行比較。

效能排序:fanout > direct >> topic。比例大約為11:10:6

一.direct exchange

任何傳送到direct exchange的訊息都會被**到routekey中指定的queue。

1.一般情況可以使用rabbitmq自帶的exchange:」"(該exchange的名字為空字串,下文稱其為default exchange)。

2.這種模式下不需要將exchange進行任何繫結(binding)操作

3.訊息傳遞時需要乙個「routekey」,可以簡單的理解為要傳送到的佇列名字。

4.如果vhost中不存在routekey中指定的佇列名,則該訊息會被拋棄。

二.fanout exchange

任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。

1.可以理解為路由表的模式

2.這種模式不需要routekey

3.這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。

4.如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。

三.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.#」能與上述兩者匹配。

5.同樣,如果exchange沒有發現能夠與routekey匹配的queue,則會拋棄此訊息。

RabbitMQ常用的三種模式詳解

rabbit有direct路由模式,topic萬用字元主題訂閱模式,fanout廣播發布模式,下面將逐一詳細的講解三種模式的用法及應用場景。一 direct路由模式 該方式乙個路由鍵對應乙個訊息佇列,乙個訊息佇列可以對應多個路由鍵,乙個訊息佇列對應乙個消費者,當乙個佇列下有多個消費者時,mq採用的是...

交換機上的三種埠模式

補充知識 pvid和vid區別 pvid英文解釋為port base vlan id,是基於埠的vlan id,乙個埠可以屬於多個vlan 本質意思是該埠採用 hybrid或者 trunk模式下,這個埠允許多個vlan的資料報通過 但是只能有乙個pvid,收到乙個不帶tag頭的資料報時,會打上pvi...

交換機的三種交換方式

1.直通式 cut through 直通方式的乙太網交換機可以理解為在各埠間是縱橫交叉的線路矩陣 交換機。它在輸入埠檢測到乙個資料報時,檢查該包的包頭,獲取包的目的位址,啟動內部的動態查詢表轉換成相應的輸出埠,在輸入與輸出交叉處接通,把資料報直通到相應的埠,實現交換功能。由於不需要儲存,延遲非常小 ...