RabbitMQ的四種ExChange
在上上篇部落格中已經簡單說了下Exchange是幹什麼的,在message到達Exchange後,Exchange會根據route規則進入對應的Queue中,message可能進入一個Queue也可能進入對應多個Queue,至於進入哪個Queue或者是說哪個Queue都不進入,這要依據ExChange的ExchangeType和Exchange所繫結的路由規則,實現AMQP0.9.1協議的RabbitMQ Broker提供了四種ExChangeType。
這四種ExchangeType分別是Direct exchange,Fanout exchange,Topic exchange和Headers exchange。這四種累的exchange
name:名稱
Durability:持久化標誌,如果為true,則表明此exchange是持久化的。
Auto-delete:刪除標誌,當所有佇列在完成使用此exchange時,是否刪除
Arguments:這個暫時不清楚
從上面Exchange的屬性來看,一個Exchange可能是持久化的,也有可能不需要持久化,這還得看具體的使用情況,下面就來分別介紹下這四種ExchangeType。
Direct Exchange:
實現方式如下:
DirectExchange是RabbitMQ Broker的預設Exchange,它有一個特別的屬性對一些簡單的應用來說是非常有用的,在使用這個型別的Exchange時,可以不必指定routing key的名字,在此型別下建立的Queue有一個預設的routing key,這個routing key一般同Queue同名。
適用場景:
這種型別的Exchange,通常是將同一個message以一種迴圈的方式分發到不同的Queue,即不同的消費者手中,使用這種方式,值得注意的是message在消費者之間做了一個均衡,而不是說message在Queues之間做了均衡。
Fanout Exchange:
實現方式如下:
使用這種型別的Exchange,會忽略routing key的存在,直接將message廣播到所有的Queue中。
適用場景:
第一:大型玩家在玩線上遊戲的時候,可以用它來廣播重大訊息。這讓我想到電影微微一笑很傾城中,有款遊戲需要在世界上公佈玩家重大訊息,也許這個就是用的MQ實現的。這讓我不禁佩服肖奈,人家在大學的時候就知道RabbitMQ的這種特性了。
第二:體育新聞實時更新到手機客戶端。
第三:群聊功能,廣播訊息給當前群聊中的所有人。
Topic Exchange:
實現方式如下:
Topic Exchange是根據routing key和Exchange的型別將message傳送到一個或者多個Queue中,我們經常拿他來實現各種publish/subscribe,即釋出訂閱,這也是我們經常使用到的ExchangeType。
使用場景:
新聞的分類更新
同意任務多個工作者協調完成
同一問題需要特定人員知曉
Topic Exchange的使用場景很多,我們公司就在使用這種模式,將足球事件資訊釋出,需要使用這些事件訊息的人只需要繫結對應的Exchange就可以獲取最新訊息。
Headers Exchange:
實現方式如下:
Headers Exchange不同於上面三種Exchange,它是根據Message的一些頭部資訊來分發過濾Message,忽略routing key的屬性,如果Header資訊和message訊息的頭資訊相匹配,那麼這條訊息就匹配上了。
關於Headers Exchange我知道的並不多,但是這篇部落格,我會在我持續深入理解RabbitMQ的基礎上不斷調整和更新,若有什麼地方理解偏差,還請大家一起討論。越來越體會到看英文資料的重要性。