Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CachingConnectionFactory时未清洁生产商_Java_Spring_Jms_Spring Jms_Jmstemplate - Fatal编程技术网

Java 使用CachingConnectionFactory时未清洁生产商

Java 使用CachingConnectionFactory时未清洁生产商,java,spring,jms,spring-jms,jmstemplate,Java,Spring,Jms,Spring Jms,Jmstemplate,似乎JMSProducer在将消息传递到队列后没有被垃圾收集并保持活动状态,我正在使用Spring 3.2.2和CachingConnectionFactory以及保持活动状态设置来发送消息 每次我发送消息时,生产者数量不断增加 它与我正在使用的spring版本有关吗? 或者我的配置有问题吗?您需要调用您的MessageProducer。根据Java文档:- 关闭消息生成器 由于提供者可以代表MessageProducer在Java虚拟机之外分配一些资源,因此客户端应该在不需要时关闭它们。依靠垃

似乎
JMSProducer
在将消息传递到队列后没有被垃圾收集并保持活动状态,我正在使用Spring 3.2.2和
CachingConnectionFactory
以及保持活动状态设置来发送消息

每次我发送消息时,生产者数量不断增加

它与我正在使用的spring版本有关吗?
或者我的配置有问题吗?

您需要调用您的
MessageProducer
。根据Java文档:-

关闭消息生成器

由于提供者可以代表
MessageProducer
在Java虚拟机之外分配一些资源,因此客户端应该在不需要时关闭它们。依靠垃圾收集最终回收这些资源可能不够及时

根据spring CachingConnectionFactory文档:-

注意:此ConnectionFactory要求显式关闭所有会话 从其共享连接中获取。这是通常的建议 对于本机JMS访问代码。但是, ConnectionFactory,它的使用是强制性的,以便实际允许 会话重用


因此,您需要调用getCachedSessionProxy而不是getSession,一旦发送完消息,就调用close()(在finally块中)。根据源代码,将处理对此会话代理的关闭调用,以便重用会话和messageproducer。Gary的评论也是如此。

这可能与您使用它的方式有关。一些代码要显示吗?我怀疑一次又一次关闭生产商会影响性能,在使用Cachingconnectionfactory时,它应该在内部处理。这就是重点;将拦截
close()
,并将生产者放入缓存中,而不是实际关闭。工厂不能“自动”完成;应用程序必须在完成时通知它(应用程序可能希望一次生成多条消息)。@GaryRussell感谢Gary的支持suggestion@TarishSaini请查找更新的答案。如果它解决了您的问题,请告诉我们我正在使用JMSTemplate,希望它能显式地解决问题,那么我还需要调用close()方法吗???
void close()  
           throws JMSException