RabbitMQ概念簡介

注:資料收集自網絡與官方網站網絡

一、RabbitMQ的總體架構與名詞介紹:

二、RabbitMQ的四種Exchange(摘自官網)

        Direct exchange(單一傳播交換機)

        direct exchange根據消息的routing key來傳送消息。direct exchange是單一傳播路由消息的最佳選擇(儘管它們也能夠用於多路傳播路由),如下是它們的工做原理:  架構

  •     一個routing key爲K的queue與exchange進行綁定
  •    當一條新的routing key爲R的消息到達direct exchange時,若是K=R,exchange 將它路由至該queue    

    direct exchange常常用於在多個工做者(同一應用程序的多個實例)之間分配任務。direct exchange能夠用圖形方式表示以下:分佈式

         

                      圖源:官網網站

        

                     圖源:網絡spa

        Fanout exchange(廣播交換機)

        fanout exchange路由消息到全部的與其綁定的queue中,忽略routing key。若是N個queue被綁定到一個fanout exchange,當一條新消息被髮布到exchange時,消息會被複制而且傳送到這N個queue。fanout exchange是廣播路由的最佳選擇。由於一個fanout exchange傳送消息的副本到每個與其綁定的queue,它的使用狀況很類似:操作系統

  •    大量的多用戶在線(multi-player online MMO)遊戲使用它更新排行榜或者其餘的全體事件
  •    體育新聞網站使用fanout exchange向手機客戶端實時發送比分更新
  •    分佈式系統能夠廣播各類狀態與配置更新
  •    羣聊能夠使用fanout exchange讓消息在參與者之間傳輸

        一個fanout exchange圖形化的表述以下:設計

         

                            圖源:官網遊戲

        

                           圖源:網絡事件

        Topic exchange(多路廣播交換機)

         Topic exchange路由消息到一個或者多個queue,基於消息的routing key和queue與exchange之間的綁定模式的匹配。Topic exchange常常被用於實現各類發佈/訂閱模式的變化。Topic exchanges一般被用於多路廣播路由消息。    路由

         Topic exchange有很是多的應用場景。當一個問題牽涉到多個consumer/應用程序,他們有選擇的選擇他們接收何種何種類型的消息。能夠考慮使用topic exchange。

         使用示例:

  •    銷售與特定地理位置相關的數據,好比銷售點
  •    由多個工做者完成的後臺任務處理,每一個都可以負責處理指定的任務
  •    庫存價格更新(更新其餘的財務數據)
  •    包含分類與標籤的新聞更新(例如只針對某一個特定的運動或團隊)
  •    不一樣種類的雲服務編制 u 分佈式結構/特定操做系統軟件的構建與包裝,每一個處理者只能處理一個結構或者系統

        一個topic exchange圖形化的表述以下:

       

                                圖源:網絡

        Headers exchange(首部交換機)

         header exchange爲在多個屬性進行路由而設計的,這些屬性更適合描述爲消息頭,而不是routing key。headers exchanges忽略routing key屬性,相反用於路由的屬性是從headers屬性中獲取的。若是消息頭的值等於指定的綁定值,則認爲消息是匹配的。      

         能夠使用多個header匹配將一個queue綁定到header exchange。在這種狀況下,broker須要從應用程序開發者那邊獲取多條信息,也就是說,是否應該考慮任何headers匹配的消息,仍是全部headers都匹配的消息?這就是所謂的「x-match」綁定參數。當「x-match」參數的值被設爲「any」,只要一個匹配的header值就足夠了。相反的,設置「x-match」的值爲「all」須要全部的headers值匹配。    

         Headers exchanges被視爲「direct exchanges on steroids」。由於其依據headers值路由消息,能夠被當作direct exchanges使用,routing key沒必要是一個字符串;舉例來講它能夠是一個整數或者一個hash(dictionary)

        Default exchange(默認交換機)

        default exchange是一個沒有名稱的(空字符串)被broker預先申明的direct exchange。它所擁有的一個特殊屬性使它對於簡單的應用程序頗有做用:每一個建立的queue會與它自動綁定,使用queue名稱做爲routing key。    

      舉例說,當你申明一個名稱爲「search-indexing-online」的queue時,AMQP broker使用「search-indexing-online」做爲routing key將它綁定到default exchange。所以,一條被髮布到   default exchange而且routing key爲"search-indexing-online"將被路由到名稱爲"search-indexing-online"的queue。換句話說,default exchange使直接傳送消息到queue成爲可能,即便從技術角度上而言,事實並非這樣。

相關文章
相關標籤/搜索