三種Exchange模式

  • 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上。 2.這種模式不需要RouteKey,但要將Exchange與Queue進行綁定 3.一個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,則會拋棄此消息。

Last updated