问题
RocketMQ设置的ConsumeThreadMax无效,线程数只会达到ConsumeThreadMin值
回答
RocketMQ的线程池是ThreadPoolExecutor,线程池的核心线程数等于mq设置的最小线程数,线程池的最大线程数等于mq设置的最大线程数。
即:ThreadPoolExecutor.corePoolSize == RocketMQ.consumeThreadMin
ThreadPoolExecutor.maximumPoolSize == RocketMQ.consumeThreadMax
所以问题变更为
ThreadPoolExecutor.maximumPoolSize不生效
ThreadPoolExecutor的实现逻辑是
当前线程数等于核心线程数,任务会被扔进队列里面,只有当队列满了,才会新起线程,进而达到最大线程数。
然而MQ在new队列的时候,并没有设置容量大小,所以是无界队列...基本是不会满的。
总结起来就是:
1.rocketMQ用的是ThreadPoolExecutor
2.ThreadPoolExecutor只有当任务