RabbitMQ訊息交換模式簡介
阿新 • • 發佈:2018-12-17
RabbitMQ是AMQP的一個典型實現,它訊息釋出者的訊息釋出到Exchange上,同時需要制定routingkey,可以通過指定交換機的不同模式實現不同的行為。
RabbitMQ提供了四種Exchange:fanout,direct,topic和header。其中header模式在實際使用中較少,本文只對前三種模式進行比較。
Direct模式(點對點通訊):
Direct Exchange是RabbitMQ預設的交換機模式,也是最簡單的模式,根據key全文匹配去尋找佇列。規則如下:
-
釋出到exchange的訊息通過routingkey的完全匹配發布到queue上。
- 如果routingkey不存在,則丟棄
點對點方式是最為傳統和常見的通訊方式,它支援一對一、一對多、多對多、多對一等多種配置方式,支援樹狀、網狀等多種拓撲結構。
fanout模式(多點廣播):
fanout模式比較簡單,廣播式的,無視routingkey直接傳送給所有的queue
Topic模式(釋出/訂閱):
任何傳送到Topic Exchange的訊息都會被轉發到所有關心RouteKey中指定話題的Queue上
- 這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有一個"標題"(RouteKey),Exchange會將訊息轉發到所有關注主題能與RouteKey模糊匹配的佇列。
- 這種模式需要RouteKey,也許要提前繫結Exchange與Queue。
- 在進行繫結時,要提供一個該佇列關心的主題,如"#.log.#"表示該佇列關心所有涉及log的訊息(一個RouteKey為"MQ.log.error"的訊息會被轉發到該佇列)。
-
"#"表示0個或若干個關鍵字,""表示一個關鍵字。如"log."能與"log.warn"匹配,無法與"log.warn.timeout"匹配;但是"log.#"能與上述兩者匹配。
- 同樣,如果Exchange沒有發現能夠與RouteKey匹配的Queue,則會拋棄此訊息。