我使用Spring JMS cachingconnectionfactory来改进基于Spring Integration和IBM MQ的应用程序的性能。我把sessioncachesize设为10,因为我们在使用/发送消息时最多有10个并发线程工作(ThreadPoolTaskExecutor)。
当我查看在MQ资源管理器中打开的连接数(打开队列的输出计数)时,它显示10并且它会保持数天并且永远不会关闭。
此外,heartbeat / keepalive机制对我们不起作用,因为我们希望根据上次使用的时间物理关闭缓存的连接。
答案 0 :(得分:1)
如果超时是IBM返回的Session
对象的属性,则可以继承连接工厂,覆盖createSession()
;调用super.createSession(...)
然后在返回之前设置属性。
您可能还必须覆盖getSession(...)
并继续调用它,直到您获得未关闭的会话。我没有看到任何逻辑来检查标准工厂中的会话状态。 (getSession()
在缓存为空时调用createSession()
。