当我使用消息时,增加consumerThreadMax的值是不起作用的。
希望当consumerThreadMax的值增加时,我的专家消费速度会更快
现在是即使我增加consumerThreadMax的值,消耗速度也保持稳定
4.3.0,我检查了最后一个版本,它仍然会发生。
我在类ConsumerMessageConcurrentlyService中找到了一些: 公共ConsumerMessageConcurrentlyService(DefaultMQPushConsumerImpl DefaultMQPushConsumerImpl, 消息侦听器并发消息侦听器){ this.defaultMQPushConsumerImpl=defaultMQPush ConsumerImpl; this.messageListener=消息侦听器;
this.defaultMQPushConsumer = this.defaultMQPushConsumerImpl.getDefaultMQPushConsumer();
this.consumerGroup = this.defaultMQPushConsumer.getConsumerGroup();
this.consumeRequestQueue = new LinkedBlockingQueue<Runnable>();
this.consumeExecutor = new ThreadPoolExecutor(
this.defaultMQPushConsumer.getConsumeThreadMin(),
this.defaultMQPushConsumer.getConsumeThreadMax(),
1000 * 60,
TimeUnit.MILLISECONDS,
this.consumeRequestQueue,
new ThreadFactoryImpl("ConsumeMessageThread_"));
this.scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryImpl("ConsumeMessageScheduledThread_"));
this.cleanExpireMsgExecutors = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryImpl("CleanExpireMsgScheduledThread_"));
}
该构造函数将无界队列(new LinkedBlockingQueue())作为workQueue,它有一个风险,即当新任务到来时,如果数量等于consumeThreadMin,它将被推送到无界队列,consume线程数量将永远不会增加。因此consumerThreadMax值永远不会起作用因此consumerRequestQueue应该被分配为一个有界队列作为workQueue,比如this.consumerRequestQueue=new LinkedBlockingQueue(128);
原提问者GitHub用户zhangdp-taozi
是的,所以最好将minThread设置为maxThread,但如果您想将有界队列替换为workQueue,则在该队列已满的情况下会导致消息丢失
原回答者GitHub用户duhenglucky
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。