多生产者组多消费者组的思考
思考下。当一个client,订阅多个consumergroup、多个productgroup时。此时进程的线程模型是如何的?
之前文章有分析到。消费者组,是有多个线程去共同协作的。
假设订阅2个consumergroup, 线程数量是2倍增加吗?订阅多个,那线程增长就恐怖了。
事实上,rocketmq的client端,默认就是倍数增长的。如果没去关注,那么可能就出现程序响应迟钝了。
MQClientInstance的createOrGet
查看上图,关键点,在于rocketmq.client.name的配置。默认是DEFAULT,会导致倍数增长。修改后,所有group会共用同一个MQClientInstance。
关键代码在
org.apache.rocketmq.client.ClientConfig#changeInstanceNameToPID
org.apache.rocketmq.client.impl.MQClientManager#getOrCreateMQClientInstance(org.apache.rocketmq.client.ClientConfig, org.apache.rocketmq.remoting.RPCHook)