【发布时间】:2017-04-26 18:42:05
【问题描述】:
我使用 Spring JMS 缓存连接工厂来提高基于 Spring Integration 和 IBM MQ 的应用程序的性能。我将 sessioncachesize 设置为 10,因为我们有最多 10 个并发线程(ThreadPoolTaskExecutor)在消费/发送消息。
当我查看在 MQ 资源管理器中打开的连接数(队列的打开输出计数)时,它显示为 10,并且它会持续数天并且永远不会关闭。
- 有没有办法以编程方式检测连接 可能过时 - 说闲置半天 - 我检查了 resetConnection() 但不确定如何获取上次使用的时间 会议。
- Spring 是否提供任何连接超时参数 缓存连接工厂?或者如何释放这些空闲连接?
此外,心跳/keepalive 机制对我们不起作用,因为我们希望根据上次使用的时间物理关闭缓存的连接。
【问题讨论】:
-
必须有其他事情发生;
CachingConnectionFactory是SingleConnectionFactory的子类。每个工厂只有一个连接;会话缓存在该连接中。 -
MQ 资源管理器中的输出计数/连接数是 IBM MQ 类创建的连接句柄数。根据 IBM 文档,JMS 会话对象封装了一个 IBM MQ 连接句柄,因此定义了会话的跨国范围。由于我的应用程序中的会话缓存大小为 10,因此创建了 10 个 MQ 连接句柄(每个会话一个)保持打开状态数天并且处于非活动状态。我们可以将会话超时附加到 CCF 中的缓存会话吗? ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/…
-
我的应用程序需要 CCF 中缓存会话的会话超时。如果会话在一段时间内不活动/未使用,我们希望从缓存和物理关闭中删除会话。我不确定 Spring 是否提供了将超时附加到会话或公开上次使用会话的选项。
标签: spring jms spring-integration ibm-mq spring-jms