1. 程式人生 > >RabbitMQ的四種ExChange

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的基礎上不斷調整和更新,若有什麼地方理解偏差,還請大家一起討論。越來越體會到看英文資料的重要性。