深入了解PooledConnectionFactory CachingConnectionFactory Sin
深入理解PooledConnectionFactory CachingConnectionFactory SingleConnectionFactory
PooledConnectionFactory实现ConnectionFactory接口。为因JmsTemlate每次发送消息时都会重新创建连接,创建connection,session,创建productor。这是一个非常耗性能的地方,特别是大数据量的情况下。因此出现了PooledConnectionFactory。这个类只会缓存connection,session和productor,不会缓存consumer。因此只适合于生产者发送消息。那为什么不缓存consumer呢?官方解释是由于消费者一般是异步的,也就是说,broker代理会把生产者发送的消息放在一个消息者的预取缓存中。当消息者准备好的时候就会从这个预取缓存中取出来进行处理。我想,这个只是在要求消息处理的及时性不是特别高的情况下。如果希望处理能够提高速度,自然也可以从这部分提高效率,减小不断创建consumer的时间(大数据量的情况下)。
CachingConnectionFactory类扩展自SingleConnectionFactory,主要用于提供缓存JMS资源功能。具体包括messageProducer、MessageConsumer和Session的缓存功能。
publicclassCachingConnectionFactoryextendsSingleConnectionFactory{
privateint sessionCacheSize =1;
privateboolean cacheProducers =true;
privateboolean cacheConsumers =true;
privatevolatileboolean active =true;
privatefinalMap cachedSessions =newHashMap();
Spring中发送消息的核心是JmsTemplate,然而Jmstemplate的问题是在每次调用时都要打开/关闭session和producter,效率很低,所以引申出了PooledConnectionFactory连接池,用于缓存session和producter。然而这还不是最好的。从spring2.5.3版本后,Spring又提供了CachingConnectionFactory,这才是首选的方案。然而CachingConnectionFactory有一个问题必须指出,默认情况下,CachingConnectionFactory只缓存一个session,在它的JavaDoc中,它声明对于低并发情况下这是足够的。与之相反,PooledConnectionFactory的默认值是500。这些设置,在很多情况下,需要亲自去测试并验证。我将其设置为100,对我来说还是很不错。
SingleConnectionFactory类实现了ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory,ExceptionListener接口。
Spring提供ConnectionFactory接口的一个实现,SingleConnectionFactory, 它将在所有的createConnection()调用中返回同一个相同的共享连接对象, 并且忽略Connection.close()和stop()的调用。根据JMS连接模型,这是完全线程安全的(相反,如JDBC)。这个共享连接能够在出现异常时自动恢复创建一个新的共享连接。可以通过SingleConnectionFactory的构造函数中传入Connection对象或者 ConnectionFactory对象,用来创建被代理的连接对象。 SingleConnectionFactory.createConnection方法返回的连接是个代理,它忽略了对stop和close方法的调用 (连接会在SingleConnectionFactory.destroy方法中关闭)。
protectedConnection getSharedConnectionProxy(Connection target){
List classes =newArrayList(3);
classes.add(Connection.class);
if(target instanceofQueueConnection){
classes.add(QueueConnection.class);
}
if(target instanceofTopicConnection){
classes.add(TopicConnection.class);
}
return(Connection)Proxy.newProxyInstance(
Connection.class.getClassLoader(),
(Class[]) classes.toArray(newClass[classes.size()]),
newSharedConnectionInvocationHandler(target));
}
这在测试和独立的环境中相当有用, 因为同一个连接可以被用于跨多个监听容器的JmsTemplate调用以跨越多个事务。 SingleConnectionFactory接受一个通常来自JNDI的标准ConnectionFactory的引用。
另外spring的消息监听容器都支持一个共享的connection在多个监听容器中使用。结合SingleConnectionFactory才真正让人感受到跨多个监听容器共享同一个JMS连接的功能。
在Java EE环境中,SingleConnectionFactory将把Connection和Session放到缓冲池中,因此这些资源在事务中得到了有效的复用。在独立环境中使用Spring的 SingleConnectionFactory 会存在共享的JMS Connection,但每个事务有自己独立的 Session。另外可以考虑使用供应商特定的池适配器,,如ActiveMQ的 PooledConnectionFactory 类。
SingleConnectionFactory的reconnectOnException属性用来指定是否在连接抛出JMSException的时候,对连接进行重置,重置后如果再调用createConnection方法,那么会返回一个新的连接。
SingleConnectionFactory不支持定义用户名和密码。
深入了解PooledConnectionFactory CachingConnectionFactory Sin的更多相关文章
- 正弦 sin 余弦 cos
正弦 以下概念需掌握 直角,锐角 sinA = 对边 / 斜边 性質 奇偶性 奇 定義域 (-∞,∞) 到達域 [-1,1] 周期 2π 在數學中,正弦是一種週期函數,是三角函数的一種.它的定义域是整 ...
- sin, miss the mark, correct our aim and try again
Guilt should only be a call to action. When we see that we "missed the mark"(the meaning o ...
- sin=in.readLine();
import java.io.*; public class LineIO{ public static void main(String[] args) { String sin,inputStri ...
- [Everyday Mathematic]20150212 求 $(\cos x+2)(\sin x+1)$ 的最大值
设 $$\bex t=\tan \frac{x}{2}, \eex$$ 则 $$\bex \cos x=\frac{1-t^2}{1+t^2},\quad \sin x=\frac{2t}{1+t^2 ...
- [再寄小读者之数学篇](2014-11-19 $\sin(x+y)=\sin x\cos y+\cos x\sin y$)
$$\bex \sin(x+y)=\sin x\cos y+\cos x\sin y. \eex$$ Ref. [Proof Without Words: Sine Sum Identity, The ...
- [再寄小读者之数学篇](2014-11-19 $\sin x/x$ 在 $(0,\pi/2)$ 上递增)
$$\bex \frac{\sin x}{x}\nearrow. \eex$$ Ref. [Proof Without Words: Monotonicity of $\sin x/x$ on $(0 ...
- matlab实现插值法sin函数
插值法实现sin函数: %calculate and print the sine function %input: x %output: sin(x) similar function y = si ...
- JS Math.sin() 与 Math.cos() 用法
Math.sin(x) x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x) x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...
- 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨
1.使用matlab制作.coe文件 查找表的构造 构造256点的正余弦表 exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表 matlab代码: 求sin fid = ...
随机推荐
- jquery tree events didn't work
You should put your js in $(document).ready() like following. Hope this will help you. $(document).r ...
- Oracle中新增表代码
create table userinfo ( id varchar2(36) primary key, username varchar2(50) not null, password varcha ...
- MyEclipse8.5快速搭建SSH框架
来源于:http://jingyan.baidu.com/article/a378c960a78125b3282830cc.html MyEclipse8.5快速搭建SSH框架 使用版本: Strut ...
- Java基础-常量池
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...
- 【CodeForces 613A】Peter and Snow Blower
题 题意 给出原点(不是(0,0)那个原点)的坐标和一个多边形的顶点坐标,求多边形绕原点转一圈扫过的面积(每个顶点到原点距离保持不变). 分析 多边形到原点的最小距离和最大距离构成的两个圆之间的圆环就 ...
- POJ-1273 Drainage Ditches 最大流Dinic
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65146 Accepted: 25112 De ...
- [NOIP2011] 提高组 洛谷P1312 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- linux内核数据结构学习总结
目录 . 进程相关数据结构 ) struct task_struct ) struct cred ) struct pid_link ) struct pid ) struct signal_stru ...
- HD 2177(威佐夫博弈 入门)
取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 1049 Climbing Worm
解题思路: 1. 两种情况,0x1:井深度小于一次跳的高度.0x2:井深度大于一次跳的高度 2.如果 属于 0x1 则一次跳出 3.否则 本次解题中直接枚举跳的次数 一直循环,直到 [每次跳的真实高度 ...