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】

相关问题