Rabbitmq Exchange的四種模式
Rabbitmq為訊息佇列提供了一個通用的訊息傳送和接受平臺,且保證訊息在傳輸過程中安全可靠。以下是訊息從傳送到被消費的過程。exchange有四種類型:Direct Exchange;Fanout Exchange;Topic Exchange;Headers Exchange
一、Fanout Exchange
它是最基本的交換機型別,它所能做的事情非常簡單———廣播訊息。扇形交換機會把能接收到的訊息全部發送給繫結在自己身上的佇列。因為廣播不需要“思考”,所以扇形交換機處理訊息的速度也是所有的交換機型別裡面最快的。
二、Direct Exchange
它是一種帶路由功能的交換機,一個佇列會和一個交換機繫結,除此之外再繫結一個routing_key
,當訊息被髮送的時候,需要指定一個binding_key
,這個訊息被送達交換機的時候,就會被這個交換機送到指定的佇列裡面去。同樣的一個binding_key
也是支援應用到多個佇列中的。這樣當一個交換機繫結多個佇列,就會被送到對應的佇列去處理。
三、Topic Exchange
它是一種支援正則匹配的exchange,傳送到topic exchange上的訊息需要攜帶指定規則的routing_key
,主題交換機會根據這個規則將資料傳送到對應的(多個)佇列上。該exchange的routing_key需要有一定的規則,交換機和佇列的binding_key
*.#.*.....
的格式,每個部分用.
分開,其中:*
表示一個單詞,#
表示任意數量(零個或多個)單詞。
四、Headers Exchange
它是忽略routing_key的一種路由方式。路由器和交換機路由的規則是通過Headers資訊來交換的,這個有點像HTTP的Headers。將一個exchange宣告成Headers exchange,繫結一個佇列的時候,定義一個Hash的資料結構,訊息傳送的時候,會攜帶一組hash資料結構的資訊,當Hash的內容匹配上的時候,訊息就會被寫入佇列。繫結exchange和佇列的時候,Hash結構中要求攜帶一個鍵“x-match”,這個鍵的Value可以是any或者all,這代表訊息攜帶的Hash是需要全部匹配(all),還是僅匹配一個鍵(any)就可以了。相比direct exchange,首部交換機的優勢是匹配的規則不被限定為字串(string)。