【轉】RabbitMQ三種Exchange模式

【轉】RabbitMQ三種Exchange模式html

RabbitMQ中,全部生產者提交的消息都由Exchange來接受,而後Exchange按照特定的策略轉發到Queue進行存儲性能

RabbitMQ提供了四種Exchange:fanout,direct,topic,header。但經常使用的主要是fanout,direct,topic。3d

性能排序:fanout > direct >> topic。比例大約爲11:10:6htm

一.Fanout Exchangeblog

任何發送到Fanout Exchange的消息都會被轉發到與該Exchange綁定(Binding)的全部Queue上。排序

1.能夠理解爲路由表的模式隊列

2.這種模式不須要RouteKey路由

3.這種模式須要提早將Exchange與Queue進行綁定,一個Exchange能夠綁定多個Queue,一個Queue能夠同多個Exchange進行綁定。字符串

4.若是接受到消息的Exchange沒有與任何Queue綁定,則消息會被拋棄。get

二.Direct Exchange

任何發送到Direct Exchange的消息都會被轉發到RouteKey中指定的Queue

1.通常狀況可使用rabbitMQ自帶的Exchange:」"(該Exchange的名字爲空字符串,下文稱其爲default Exchange)。

2.這種模式下不須要將Exchange進行任何綁定(binding)操做

3.消息傳遞時須要一個「RouteKey」,能夠簡單的理解爲要發送到的隊列名字。

4.若是vhost中不存在RouteKey中指定的隊列名,則該消息會被拋棄。

 

三.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,則會拋棄此消息。

相關文章
相關標籤/搜索