RabbitMQ - 2 个交换将消息发送到同一个队列

RabbitMQ - 2 exchanges sending messages to the same queue

我有带有 2 个独立实例(p1、p2)的生产者应用程序和带有 2 个独立实例(c1、c2)的消费者应用程序。

生产者 p1 与 topic= t1 连接交换,queueName =name1.

消费者 c1 连接到主题= t1 的交换,queueName =name1.

生产者 p2 与 topic= t2 连接交换,queueName =name1.

消费者 c2 连接到主题= t2 的交换,queueName =name1.

我在 RabbitMQ GUI 中看到我有 2 个交换但只有 1 个队列。 c1 将只接收来自 p1 的消息,而 c2 将只接收来自 p2 的消息,RabbitMQ 正在对 c1 和 c2 之间的消息进行循环。所以我从 p2 发送的消息被 c1 和 c2 接收。

我认为在 RabbitMQ 中,相关性是每个交换器有多个队列,这里的行为是出乎意料的。为什么?

每个交换器可以有多个队列,这是真的;但是路由键是队列问题,不是消费者问题。

rabbit将使用路由键将消息发送到正确的队列;一旦在主题交换器上收到消息,该消息将被发送到绑定到该特定主题的所有队列。您这里只有一个队列,这就是为什么 C1 和 C2 都收到消息的原因。

检查 this link 以获得清晰的示例。

如果你需要分离C1和C2,你需要将它们绑定到2个不同的队列,而不是同一个队列。