我目前正在开发一种产品,该产品有自己的JMS提供者,其实现没有得到详细的文档说明。我必须在Java中准备一个独立的客户机应用程序,该应用程序将把消息发送到JMS队列。我期望有一个庞大的数据量,因此我正在考虑实现JMS连接池和会话池。
在任何对象池中,在将对象返回给客户端之前,我们需要确定对象是否健康。JMS似乎没有提供"isHealthy()“方法。另外,我无法依赖ExceptionListener,主要是因为我不确定JMS实现,而且ExceptionListener调用也是异步的。我想知道如果在调用onException之前将连接移交给客户端会发生什么情况。
作为解决方案,我计划使用TCP空闲连接超时。我的理解是,只有当TCP空闲时间连接超时结束或JMS提供者关闭时,连接才会变得不健康。
因此,我计划创建一个池连接包装器对象,当连接创建或客户端返回到池时,该对象将存储“最后使用时间”。在将连接移交给客户端之前,池将检查“上次使用时间”是否小于3分钟(假设默认TCP空闲连接超时时间为5分钟)。
我的理解和实施是否正确?
发布于 2017-02-28 11:49:58
以下是我要做的事:
#validateObject方法来执行QueueBrowser #getQueue或#getEnumeration。如果失败了,我的连接就死定了。然后,GenericObjectPool将自动调用工厂来创建一个全新的连接(#makeObject)来替换已死的连接。
https://stackoverflow.com/questions/42482192
复制相似问题