使用Spring的CachingConnectionFactory时关闭会话

这里与Spring CachingConnectionFactory相关的java doc有评论:

注意:此ConnectionFactory要求显式关闭从其共享Connection获取的所有Sessions。 无论如何,这是本机JMS访问代码的通常建议。 但是,使用此ConnectionFactory,必须使用它才能实际允许会话重用。

我不清楚如何使用我的应用程序中的以下给定配置来处理这个问题。

                  com.tibco.tibjms.naming.TibjmsInitialContextFactory tibjmsnaming://localhost:7222 admin admin       

监听器类是这样的:

 public class MessageListenerApp implements MessageListener { private static int c = 0; @Override public void onMessage(Message arg0) { try { System.out.println("Received Message..."+arg0.getStringProperty("MessageNum")+". Waiting to finish.."); Thread.sleep(2000); System.out.println("Finished processing.."+arg0.getStringProperty("MessageNum")+".."+(c++)); } catch (Exception e) { e.printStackTrace(); } } 

}

如何遵循应明确关闭从共享连接获取的会话的建议?

遇到SessionAwareMessageListener接口,该接口提供onMessage方法,该方法提供Session的句柄。 那么要正确实现会话结束,是否应实现此接口?

将缓存连接工厂与侦听器容器一起使用通常不是一个好主意,特别是在使用maxConcurrentConsumers > concurrentConsumers – 您最终可以在缓存中获得缓存的消费者,这会在没有侦听器的情况下获取消息,并且此类消息可以获得“卡住”。

因此,在这种情况下不要使用CCF ,它真的打算在生产者方面使用。

由于容器管理并发性,因此会话/消费者是长期存在的,不需要缓存。

使用DefaultMessageListenerContainer时 ,不需要应用程序关闭会话,它会创建所需的会话并在关闭期间关闭它们。

根据我的理解,当你的应用程序使用CachingConnectionFactory引用创建Session时,你提到的注释适用于哪个spring没有任何线索。