RabbitMQ-2交换向同一队列发送消息

RabbitMQ-2交换向同一队列发送消息,rabbitmq,rabbitmq-exchange,Rabbitmq,Rabbitmq Exchange,我有两个独立实例(p1、p2)的生产者应用程序和两个独立实例(c1、c2)的消费者应用程序 生产者p1使用topic=t1,queueName=name1连接到exchange 消费者c1连接到主题为t1、队列名称为name1的exchange 生产者p2使用topic=t2,queueName=name1连接到exchange 消费者c2连接到主题为t2、队列名称为name1的exchange 我在RabbitMQ GUI中看到,我有2个交换,但只有1个队列。 相反,c1将只从p1接收消息,c

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

生产者p1使用topic=t1,queueName=name1连接到exchange

消费者c1连接到主题为t1、队列名称为name1的exchange

生产者p2使用topic=t2,queueName=name1连接到exchange

消费者c2连接到主题为t2、队列名称为name1的exchange

我在RabbitMQ GUI中看到,我有2个交换,但只有1个队列。 相反,c1将只从p1接收消息,c2将只从p2接收消息,RabbitMQ正在对c1和c2之间的消息进行循环。因此,我从p2发送的消息同时被c1和c2接收


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

每个交易所都可以有多个队列,这是真的;但路由密钥是队列问题,而不是消费者问题

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

检查链接以获得清晰的示例


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

每个exchange都可以有多个队列,这是事实;但路由密钥是队列问题,而不是消费者问题

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

检查链接以获得清晰的示例


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

在这个图中,只有一个生产者,我有两个生产者和两个交换。如果你从一个不同的角度来看我的问题,我有一个消费者接收来自两个生产者的请求。这怎么可能呢?因为您为两个消费者使用相同的队列;如果您有两个交换绑定到同一队列,则无论消息是谁生成的,它都将发送到队列“queueName=name1”,您的两个使用者都将看到它。在这个图中,只有一个生产者,我有两个生产者和两个交换。如果你从一个不同的角度来看我的问题,我有一个消费者接收来自两个生产者的请求。这怎么可能呢?因为您为两个消费者使用相同的队列;如果将两个交换绑定到同一队列,则无论消息是由谁生成的,它都将被发送到队列“queueName=name1”,您的两个消费者都将看到它。