Php rabbitmq使用者获取不同路由密钥的消息
我们有两个消费者,c1(在php中)绑定到exchange 1、队列1和路由键1;和c2(java)绑定到exchange 1、队列1和路由密钥2。i、 e.只有路由密钥不同,但交换和队列相同 在php中,我们按如下方式进行绑定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
$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的消息
- 带有路由密钥1的E1应转到QC1
- 带有路由键2的E1应转到QC2
- C1应该使用来自QC1的消息
- C2应该使用来自QC2的消息