绑定队列的问题

绑定队列的问题

String queue = channel.queueDeclare().getQueue();
//交换机和队列绑定
channel.queueBind(queue, EXCHANGE_NAME, "info");
channel.queueBind(queue, EXCHANGE_NAME, "warning");
channel.queueBind(queue, EXCHANGE_NAME, "error");

1.queue是接收者生成的队列名,绑定的时候根据这个绑定不行吗?

2.后面还跟了一个路由键,这个说是区分队列的,那前面的都是同一个队列,路由键不同,这是咋区分的?

3.这应该是三个队列还一个?如果是三个的话为啥只声明了一个queue

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-10-11 11:37:39

同学你好,1、是可以的,queueBind()方法的作用是:将队列与交换机进行绑定。所以是可以通过队列名进行绑定的

2、具体如何区分是根据routingKey进行区分。如下所示:

https://img1.sycdn.imooc.com//climg/6163af2e0919ba8413320648.jpg

    如果routingKey是”error”发送消息到Exchange(交换器),则消息会路由到Queue1和Queue2。如果我们以routingKey为”info”、”warning”、”error”来发送消息,则消息只会路由到Queue2。如果我们以其他routingKey发送消息,则消息不会路由到这两个Queue中。

3、是一个队列,这里简单理解,就是队列里面的消息会被多个消费者同时接收到,消费者接收到的信息一致。而当前的ReciveLogsDirect1就是一个消费者,而这里的queue就是一个队列,将队列与交换机进行绑定,则队列中的消息会被消费者依次接收到的。

    https://img1.sycdn.imooc.com//climg/6163b0bf09f421ea10400390.jpg

祝学习愉快!

  • 提问者 Java小彩鸡 #1
    1. 发送方发送了三次,指定了三个key,但是没有声明队列,是不是在发送后是没有队列的?

    2. 在两个接收方启动后,产生了两个临时队列Q1和Q2,因为第一个接收方只有一个error的key,所以发送的消息只有error的消息会进入他产生的Q1队列,第二个接收方的Q2队列里有三个消息,对吗?

    3. 绑定哪个队列是由第一个参数决定的,具体这个队列接收那些消息是key决定的,对吗?

    2021-10-12 16:05:44
  • 好帮手慕小尤 回复 提问者 Java小彩鸡 #2

    同学你好,1、direct模式是根据RoutingKey 匹配消息路由到指定的队列。所以在发送消息时不需要声明队列的,我们在接收时(消费者)创建队列进行接收就可以了。

    2、同学理解是正确的。

    3、同学理解是正确的。

    祝学习愉快!

    2021-10-12 18:30:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师