【发布时间】:2017-07-17 20:33:07
【问题描述】:
我目前正在开发一种产品,该产品具有自己的 JMS 提供程序,其实现没有很好的文档记录。我必须用 Java 准备一个独立的客户端应用程序,它将消息发布到 JMS 队列。我预计会有巨大的数据量,因此我正在考虑实现 JMS 连接池和会话池。
在任何对象池中,我们需要在将对象返回给客户端之前确定对象是否健康。 JMS 似乎没有提供“isHealthy()”方法。另外,我不能依赖 ExceptionListener 主要是因为我不确定 JMS 提供程序的实现,而且 ExceptionListener 调用是异步的。我想知道如果在调用onException之前将连接交给客户端会发生什么。
作为解决方案,我计划使用 TCP 空闲连接超时。我的理解是,只有当 TCP 空闲时间连接超时或 JMS 提供程序关闭时,连接才会变得不健康。
因此,我计划创建一个池连接包装对象,该对象将在创建连接或由客户端返回池时存储“最后使用时间”。在将连接移交给客户端之前,池会检查自“上次使用时间”以来的时间间隔是否小于 3 分钟(假设默认 TCP 空闲连接超时为 5 分钟)。
我的理解和实现是否正确?
【问题讨论】:
标签: java tcp jms connection-pooling