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

当一个队列有60个消息且消费者未启动时,启动消费者会导致启动错误和消息消费混乱。问题源于消费者在创建指定channel并订阅消息时,错误地绑定了其他消费者的channel。解决方案是确保所有消费者在指定channel后统一订阅消息,避免channel重复引用,从而解决启动报错和消息数量异常问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

在解决这个问题的时候,https://mp.youkuaiyun.com/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肯定不会重复。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值