ActiveMQ提供了PoolConnectionFactory、PoolConnection等实现连接池功能,连接池是提供对connection、session、producer的“池”。
(1)首先connection、session、producer的创建会消耗大量的系统资源。
(2)其次consumer有自己的机制,“池”没有存在的价值。
实现原理
PoolConnectionFactory
(1)池的存放
PoolConnection被一个Map对象存放,ConnectionKey作为该map的key,LinkedList作为连接存放的列表,也就是说获取连接时,首先会根据ConnectionKey获取对应的“小连接池”,再从“小连接池”LinkedList中去连接。
(2)工厂类的参数值
maxmumActive:session的最大活跃值,该参数会通过ConnectionPool的createSession方法加入到Session工程类中(apache-common-pool的GenericObjectPoolFactory)。
maxConnections:Map的value,LinkedList的大小,即ConnectionPool数量。
idleTimeout:线程超时时间,最后使用时间+idleTimeout<当前时间,连接关闭。
expiryTimeout:回收时间,连接创建时间+expiryTimeout<当前时间,连接关闭。
最后欢迎大家访问我的个人网站:1024s