rabbitmq 某队列的消息有60个时,消费者对应的代码居然跑不成功

正常情况下,生产者与消费者的代码都跑起来,才开始运行业务,你生产消息,我快速消费消息的。

在解决这个问题的时候,https://mp.csdn.net/postedit/80662904, 偶然发现了这个坑,如题。

背景:一个队列对应20个消费者。有很多个队列,channel 数量200左右, 一个消费者对应一个channel。

问题: 消费者的代码没有启动,现在一个队列已经有消息60个了。 现要启动消费者时,启动报错,且造成消息的数量有问题。



图可能不是很直观,说明一下, 一个队列20个消费者,正常来说,在启动消费者代码的时候,每个消费者对应一个新的channel,

每当一个消费者订阅一个消息时,拿到消息,就去干活了。

日志现在报,有消费者在绑定channel的时候,绑定到别人的channel。

思路: 之前的思路遍历所有队列,给每个队列生成20个消费者,每个消费者指定一个channel的时候,便去订阅消息。 

 conn.createChannel();

   消费者创建指定新的channel;

channel.basicConsume(queue, autoAck, "myConsumerTag", new DefaultConsumer(getChannel())

  消费者拿到 channel,便订阅消息。

故这样,所有消费者还没指定channel, 就有消费者拿到消息去干活了, 故就启动报错了。

启动报错不暂停的情况下,经发现消息,数量不对,且消息消费混乱。 

rabbitmq原码追综,没有搞懂,消费者创建新的channel,为什么是之前消费者绑定的,重复引用。 

改造: 所有消费者都指定好channel,  才一起订阅消息。 这样channel肯定不会重复。