注:資料收集自網絡與官方網站網絡
direct exchange根據消息的routing key來傳送消息。direct exchange是單一傳播路由消息的最佳選擇(儘管它們也能夠用於多路傳播路由),如下是它們的工做原理: 架構
direct exchange常常用於在多個工做者(同一應用程序的多個實例)之間分配任務。direct exchange能夠用圖形方式表示以下:分佈式
圖源:官網網站
圖源:網絡spa
fanout exchange路由消息到全部的與其綁定的queue中,忽略routing key。若是N個queue被綁定到一個fanout exchange,當一條新消息被髮布到exchange時,消息會被複制而且傳送到這N個queue。fanout exchange是廣播路由的最佳選擇。由於一個fanout exchange傳送消息的副本到每個與其綁定的queue,它的使用狀況很類似:操作系統
一個fanout exchange圖形化的表述以下:設計
圖源:官網遊戲
圖源:網絡事件
Topic exchange路由消息到一個或者多個queue,基於消息的routing key和queue與exchange之間的綁定模式的匹配。Topic exchange常常被用於實現各類發佈/訂閱模式的變化。Topic exchanges一般被用於多路廣播路由消息。 路由
Topic exchange有很是多的應用場景。當一個問題牽涉到多個consumer/應用程序,他們有選擇的選擇他們接收何種何種類型的消息。能夠考慮使用topic exchange。
使用示例:
一個topic 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是一個沒有名稱的(空字符串)被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成爲可能,即便從技術角度上而言,事實並非這樣。