深入了解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 = ...
随机推荐
- Code Hunters: Hello, world!
大家好!我们是来自MSRA联合培养班的Code Hunters小组,在未来三个月时间里我们将与殷秋丰老师一起学习高级软件工程这门课. 我们小组共有五名分别来自享誉海内外的中国科学技术大学和北京航空航天 ...
- Active-MQ的安装
(1)首先就是下载软件 wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apache-activemq-5.9.0 ...
- WordPress 常用数据库SQL查询语句大全
在使用WordPress的过程中,我们少不了要对数据库进行修改操作,比如,更换域名.修改附件目录.批量修改文章内容等等.这个时候,使用SQL查询语句可以大大简化我们的工作量. 关于如何操作SQL查询语 ...
- Go to the first line OR the last line of the file
(1) 跳到首行 :1 或 gg (2)跳到最后一行 :$ 或 G 或shift+g(大写.当前若大小写锁定直接按g,未锁定则按shift+g)
- MongoDB的安装及配置
MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐. Windows (1). 登录Mongodb官网点击下载 (2). 将zi ...
- Java获取各种常用时间方法大全
Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...
- NOI题库-小学奥赛QwQ
今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...
- java连接mysql(一)
import java.sql.*; public class MysqlTest { public static void main(String[] args) throws SQLExcepti ...
- groovy-运算符
算术和条件运算符 Groovy支”!”操作符,例如: 1 def expression = false 2 assert !expression 基于集合的运算符: Spread Operator ( ...
- eclipse中运行python脚本中有注释为中文的内容,报错:SyntaxError: Non-ASCII character '\xe5'
'''Created on 2015年7月2日 @author: liujuan'''import sysreload(sys) 以上为注释的有个日期中文的,结果运行报错:SyntaxError: N ...