2017-07-08 38 views
1

AMQP/RabbitMQ的新手。試圖理解這些概念/原理,並且偶然發現了這一點。AMQP | RabbitMQ |爲什麼他們有Fanout交換時,可以通過直接交換實現同樣的路由密鑰的多個隊列?

以下兩種範例有什麼區別?

扇出交換: FanoutExchange - >隊列1(路由鍵1),隊列2(路由鍵1),

VS

直接交換: DirectExchange - >隊列1(路由Key 1),Queue2(Routing Key 1),

兩者都不能達到相同的效果嗎? 如果不是的話,請問有人能說明它是如何不同的,以及在哪些情況下哪些是優先於其他的?

爲什麼他們有這兩種類型的交換時,都可以通過調整綁定中的路由鍵來實現?

謝謝。

回答

0

就我的理解,你展示的兩個範例可以達到同樣的效果。但這兩種交換背後的想法完全不同。

  • 扇出交換。在使用Fanout Exchange時,儘管在聲明綁定時使用了綁定鍵,但您只需將隊列綁定到某個Fanout Exchange。 In fact, whatever binding key you use to declare a binding to a Fanout Exchange, RabbitMQ simply ignore it.因此,您可以看到Fanout Exchange將更多的注意力集中在對任何與之綁定的隊列中。

    綁定鍵的含義取決於交換類型。我們之前使用的扇出交換,簡單地忽略了它的值

  • 直接交換。直接交換在綁定時有更多限制。綁定密鑰必須與附加到特定消息的路由密鑰完全相同。因此,使用不同的ruoting密鑰發送不同的消息時,Direct Exchange更加靈活,並將這些消息分發到使用不同「綁定密鑰」綁定到它的不同隊列。

    Msg1,Msg2(routingKey_1) - > DirectExchange_1 - > Queue1, Queue2(bindingKey_1)。

    【bindingKey_1 = routingKey_1】

    Msg3的(routingKey_2) - > DirectExchange_1 - >隊列3(bindingKey_2)

    【bindingKey_2 = routingKey_2】

相關問題