【问题标题】:AMQP | RabbitMQ | Why do they have Fanout exchange when the same can be achieved via Direct Exchange bounded by multiple queues with same routing key?AMQP |兔MQ |当可以通过由具有相同路由键的多个队列限制的 Direct Exchange 实现相同的交换时,为什么他们有 Fanout 交换?
【发布时间】:2017-12-12 11:19:20
【问题描述】:

AMQP/RabbitMQ 的新手。试图掌握概念/原理并偶然发现了这一点。

以下两种范式有什么区别?

扇出交换: FanoutExchange --> Queue1 (Routing Key 1), Queue2 (Routing Key 1),

直接交换: DirectExchange --> Queue1 (Routing Key 1), Queue2 (Routing Key 1),

两者的效果不一样吗? 如果没有,请有人能说明一下它有什么不同以及在哪些情况下比其他人更喜欢什么?

当这两种类型的交换都可以通过调整绑定中的路由键来实现时,为什么它们会有这两种类型的交换?

谢谢。

【问题讨论】:

    标签: rabbitmq messaging amqp


    【解决方案1】:

    据我了解,您展示的两种范例可以达到相同的效果。但是这两种交换背后的理念是完全不同的。

    • 扇出交换。在使用 Fanout Exchange 时,您需要做的就是将队列绑定到某个 Fanout Exchange,尽管您在声明绑定时使用了绑定键。 In fact, whatever binding key you use to declare a binding to a Fanout Exchange, RabbitMQ simply ignore it. 因此,您可以看到扇出交换更侧重于将消息扇出到绑定到它的任何队列。

      绑定键的含义取决于交换类型。我们之前使用的扇出交换只是忽略了它的价值

    • 直接交换。绑定时直接交换有一点限制。绑定密钥必须与附加到特定消息的路由密钥完全相同。因此,当使用不同的 ruoting 密钥发送不同的消息并将这些消息分发到使用不同的“绑定密钥”绑定到它的不同队列时,直接交换更加灵活。

      Msg1,Msg2 (routingKey_1) --> DirectExchange_1 --> Queue1, 队列 2 (bindingKey_1)。

      【bindingKey_1 = routingKey_1】

      Msg3(routingKey_2) --> DirectExchange_1 --> Queue3(bindingKey_2)

      【bindingKey_2 = routingKey_2】

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      相关资源
      最近更新 更多