我的JMS配置如下( Spring boot 1.3.8 );
@Configuration
@EnableJms
public class JmsConfig {
@Autowired
private AppProperties properties;
@Bean
TopicConnectionFactory topicConnectionFactory() throws JMSException {
return new TopicConnectionFactory(properties.getBrokerURL(), properties.getBrokerUserName(),
properties.getBrokerPassword());
}
@Bean
CachingConnectionFactory connectionFactory() throws JMSException {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(topicConnectionFactory());
connectionFactory.setSessionCacheSize(50);
return connectionFactory;
}
@Bean
JmsTemplate jmsTemplate() throws JMSException {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());
jmsTemplate.setPubSubDomain(Boolean.TRUE);
return jmsTemplate;
}
@Bean
DefaultJmsListenerContainerFactory defaultContainerFactory() throws JMSException {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setPubSubDomain(Boolean.TRUE);
factory.setRecoveryInterval(30 * 1000L);
return factory;
}
}
这应该可以正常工作。但我担心写在CachingConnectionFactory
的文件上的是什么特别是这些部分;
注意:此ConnectionFactory要求显式关闭从其共享Connection
获取的所有Sessions另请注意,从缓存的Session获取的MessageConsumers不会关闭,直到Session最终从池中删除。在某些情况下,这可能会导致语义副作用。
我认为框架处理了结束会话和连接部分?如果没有;我应该如何正确关闭它们?
或者我错过了什么?
感谢任何帮助:)
F.Y.I:我使用SonicMQ作为经纪人
答案 0 :(得分:1)
是的,JmsTemplate
将关闭会话; javadocs指的是框架之外的直接使用。