Php rabbitmq使用者获取不同路由密钥的消息

Php rabbitmq使用者获取不同路由密钥的消息,php,routing,rabbitmq,consumer,publisher,Php,Routing,Rabbitmq,Consumer,Publisher,我们有两个消费者,c1(在php中)绑定到exchange 1、队列1和路由键1;和c2(java)绑定到exchange 1、队列1和路由密钥2。i、 e.只有路由密钥不同,但交换和队列相同 在php中,我们按如下方式进行绑定 $channel->queue_bind($this->queue, $this->exchange, $this->routing1); 在java中,以下命令 channel.queueBind(queue, exchange, routi

我们有两个消费者,c1(在php中)绑定到exchange 1、队列1和路由键1;和c2(java)绑定到exchange 1、队列1和路由密钥2。i、 e.只有路由密钥不同,但交换和队列相同

在php中,我们按如下方式进行绑定

$channel->queue_bind($this->queue, $this->exchange, $this->routing1);
在java中,以下命令

channel.queueBind(queue, exchange, routing2);
$channel->basic_publish($message, $this->exchange, $this->routing1);
$channel->basic_publish($message, $this->exchange, $this->routing2);
现在,当我们使用路由键2发布用于c2的消息时,我们观察到消息是由c1和c2以循环方式接收的,而不是仅由c2接收的

c1和c2的发送者都是php,c1的发送者执行以下操作

channel.queueBind(queue, exchange, routing2);
$channel->basic_publish($message, $this->exchange, $this->routing1);
$channel->basic_publish($message, $this->exchange, $this->routing2);
c2的发送方执行以下操作

channel.queueBind(queue, exchange, routing2);
$channel->basic_publish($message, $this->exchange, $this->routing1);
$channel->basic_publish($message, $this->exchange, $this->routing2);
我们有正确的假设吗?代码有什么问题吗

[Edit1]作为实验,我们改为绑定到两个消费者和发布者的单独队列。我们观察到c2(q2和r2)的消息同时被c2和c1接收到。。。这里有点不对劲

只有路由密钥不同,但exchange和队列相同

您已经设计了队列和消费者来产生这种行为

当一个队列有多个使用者时,RMQ会将该队列中的消息循环到所有可用使用者。这是在RMQ中设计的—它允许您扩展给定队列的使用者数量,因此您可以处理更大数量的消息

如果您需要C1和C2接收不同的消息,而不是在它们之间从Q1循环消息,那么C1和C2必须具有订阅它们的不同队列

例如:

  • 带有路由密钥1的E1应转到QC1
  • 带有路由键2的E1应转到QC2
  • C1应该使用来自QC1的消息
  • C2应该使用来自QC2的消息
通过为使用者设置单独的队列,您将保证消息到达适当的使用者

只有路由密钥不同,但exchange和队列相同

您已经设计了队列和消费者来产生这种行为

当一个队列有多个使用者时,RMQ会将该队列中的消息循环到所有可用使用者。这是在RMQ中设计的—它允许您扩展给定队列的使用者数量,因此您可以处理更大数量的消息

如果您需要C1和C2接收不同的消息,而不是在它们之间从Q1循环消息,那么C1和C2必须具有订阅它们的不同队列

例如:

  • 带有路由密钥1的E1应转到QC1
  • 带有路由键2的E1应转到QC2
  • C1应该使用来自QC1的消息
  • C2应该使用来自QC2的消息
通过为使用者设置单独的队列,您将保证消息到达适当的使用者