如何在Spring JMS CachingConnectionFactory中关闭空闲连接?

时间:2017-04-26 18:42:05

标签: spring jms spring-integration ibm-mq spring-jms

我使用Spring JMS cachingconnectionfactory来改进基于Spring Integration和IBM MQ的应用程序的性能。我把sessioncachesize设为10,因为我们在使用/发送消息时最多有10个并发线程工作(ThreadPoolTask​​Executor)。

当我查看在MQ资源管理器中打开的连接数(打开队列的输出计数)时,它显示10并且它会保持数天并且永远不会关闭。

  1. 有没有办法以编程方式检测到的连接 可能陈旧 - 说闲置半天 - 我查了一下 resetConnection()但不知道如何获取最后一次使用的时间 会话。
  2. Spring是否提供任何连接超时参数 缓存连接工厂?或如何释放这些空闲连接?
  3. 此外,heartbeat / keepalive机制对我们不起作用,因为我们希望根据上次使用的时间物理关闭缓存的连接。

1 个答案:

答案 0 :(得分:1)

如果超时是IBM返回的Session对象的属性,则可以继承连接工厂,覆盖createSession();调用super.createSession(...)然后在返回之前设置属性。

您可能还必须覆盖getSession(...)并继续调用它,直到您获得未关闭的会话。我没有看到任何逻辑来检查标准工厂中的会话状态。 (getSession()在缓存为空时调用createSession()