JMS-PooledConnectionFactory(activemq-pool)

转载 2016年08月30日 10:28:43

转载:http://www.blogjava.net/ldd600/archive/2010/11/02/336755.html?opt=admin

PooledConnectionFactory有两个属性maxConnections,maximumActive。咋一看来,用人类的常识理解,maxConnection应该表示最大可建的connection数,maximumActive应该表示最大活跃的connection数,当pool中的连接数大于最大活跃数时,又超过idleTimeout会被回收线程回收到。

如果是这样理解的,就大错特错了。PooledConnetionFactory的这两个参数根本不是这个意思。

看一下PooledConnectionFactory的组成结构:


注:ConnectionPool其实存储的就是一个ActivemqConnection,起的名字真是蛋疼。

更糟的是上面两个属性也不是我们想的一样。maxConnections表示的是LinkedList中connection的数目。maximumActive表示的是SessionPool中session的最大数目。IdleTime是Connection的回收时间,回收时也不是多线程的,每次getConnection时,都会检测是否超时,如果超时,就是立即回收,此时立即重建,真蛋疼。SeesionPool是用Commons-pool实现的。

上图的结构表示的是一个PooledConnetion维护了一个Map,Map的Key可以是由username,password决定的, LinkedList维护了一个循环链表的ActivemqConnection。每次从LinkedList中的头部取出一个AactivemqConnection,然后再添加到尾部,简单的轮询式的负载均衡。而这些ActivemqConnection是可以被多线程重用的。Pool实现中也没有connection是否inactive的检测机制,因为ActivemqConnection有自己的heartbeat检测机制。每次发送或接收时候先从ConnectionPool中取出一个connection,如果Connection都用光了,就会重用在链表头部的Connection的SessionPool,所以一个Connection可能会被多个线程使用,但一个session只会对应一个线程,保证上下文隔离性。多线程同享一个物理信道,这需要Activemq有自己的拆包机制,才不会混乱。而上面提到的负载均衡,也没考虑到session的使用情况,可能我从头部拿出的connection的session pool已经被耗光,而尾部的connection session pool却很空闲,这样就要无辜的阻塞等待session。

这样看来在我们设置PooledConnection时,建议有条件的还是需要把maxConnections设置的大一些。它的默认值是1。maximumActive可以设的相对小一些,它的默认值是500,这值太大,担心内存溢出。IdleTime有条件的可以设置的大一些,增加connection的重用时间,默认值是30秒。

相关文章推荐

activemq使用PoolConnectionFactory中的问题与activemq jar版本问题

最近使用activemq来替代UDP进行消息的发送与接收,在整改项目中,踩了很多坑,为了给以后留下经验,总结了使用中遇到的问题。1 、 activemq的安装也遇到了一些问题,下次总结,总之流程时,先...

ActiveMQ使用线程池实现消息的生产与消费

1。  首先先引入相关的lib包,重点需引用activemq-client-5.8.0.jar,activemq-core-5.7.0.jar,activemq-pool-5.8.0.jar,acti...

深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

我们基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PUB/SUB(发布...

Spring整合JMS——事务管理

转:http://haohaoxuexi.iteye.com/blog/1893676 Spring提供了一个JmsTransactionManager用于对JMS Connection...

Spring整合JMS——三种connectionFactory

1、SingleConnectionFactory:对于建立JMS服务器链接的请求会一直返回同一个链接,并且会忽略Connection的close方法调用。(org.springframework.j...

Spring整合JMS——MessageConverter介绍

转:http://haohaoxuexi.iteye.com/blog/1900937 1.4     消息转换器MessageConverter MessageConverter的作用主要有...

activemq集群搭建与多线程消息发送接收案例

一、在linux系统上搭建activemq单机 二、结合spring+maven搭建activemq客户端(消费方与提供方) 三、搭建activemq集群 四、多线程消息发送与接收 五、activem...

spring整合activemq消息队列之点对点模式

关于jms概念以及activemq这里不做具体赘述,activemq是apache的一款项目,介绍里号称是最方便最强大的jms实现方式。其实jms与webservice功能是一样的,侧重点不同而已。都...

Spring整合JMS——三种消息监听器

转:http://haohaoxuexi.iteye.com/blog/1893676 Spring一共为我们提供了两种类型的MessageListenerContainer,SimpleMes...

深入浅出JMS(一)--JMS基本概念

摘要:JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)