【问题标题】:How to receive RabbitMQ by routing key in .NET?如何通过 .NET 中的路由键接收 RabbitMQ?
【发布时间】:2016-03-12 18:34:15
【问题描述】:

我有一个名称为 QUEUE 的队列以交换类型 topic。它有 2 条消息。一个带有路由键A 另一个B。有效载荷对 atm 不感兴趣。

我需要运行 2 个不同的应用程序(消费者)。我希望 app1 只接收带有路由键 A 的消息,而另一个只接收带有键 B 的消息。

我找不到解决方案 - 即使我只绑定到 A,我仍然会收到 2 条消息。如果我无法将消费者绑定到路由键,那么它的意义何在?

我该怎么做?

【问题讨论】:

    标签: c# .net rabbitmq messaging


    【解决方案1】:

    当我第一次开始使用 RabbitMQ 时,我遇到了同样的问题/困惑。我觉得这很奇怪。

    最终我意识到我在想the relationship between exchanges, queues and bindings,倒退。

    消费者不会从交换或路由密钥中消费。消费者从队列中消费。

    这是消费者唯一应该知道的事情:他们消费的队列。

    另一方面,消息发布者关心的是使用正确的路由键发布到正确的交换器,以便消息最终进入正确的队列。

    要解决您的情况,您需要查看如何让 App 1 从只接收来自队列 1 的消息的队列中消费。同样,应用程序 2 应该只接收来自队列 2 的消息。

    路由键的作用是确保消息被发送到正确的队列。

    例如,您可以这样定义拓扑:

    |交流|队列 |路由键(绑定) | |------------|----------|------------| |一些.ex |队列 1 |键.a | |一些.ex |队列 2 |键.b |

    App 1 只会使用来自 queue-1 的消息,而 App 2 只会使用来自 queue-2 的消息。当您通过some.ex exchange 发布消息时,您提供路由密钥和交换的绑定说“key.a 转到 queue-1”和“key.b 转到 queue-2”。

    这是一个非常简单的配置示例,您可以使用它来将正确的消息发送给正确的消费者。您想要的有很多潜在的配置。

    不过,主要的一点是您的消费者必须能够处理发送到它从中读取的队列的任何消息。因此,您只能将消费者可以处理的消息发送到消费者从中读取的队列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 2023-03-11
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多