2017-02-27 89 views
0

我目前正在开发一个产品,该产品有其自己的JMS提供程序,其实现没有很好的文档记录。我必须在Java中准备一个独立的客户端应用程序,它将把消息发布到JMS队列中。我期待着一个巨大的数据量,因此我正在考虑实现一个JMS连接池和会话池。JMS连接和会话池

在任何对象池中,我们需要确定对象是否健康,然后将其返回给客户端。 JMS似乎没有提供“isHealthy()”方法。另外,我无法依赖ExceptionListener,主要是因为我不确定JMS提供者的实现,而且ExceptionListener的调用也是异步的。我想知道如果在调用onException之前将连接切换到客户端会发生什么情况。

作为解决方案,我计划使用TCP空闲连接超时。我的理解是,仅当TCP空闲时间连接超时结束或者JMS提供程序关闭时,连接才会变得不健康。

因此,我打算创建一个池连接包装器对象,该连接包装器对象将在创建连接或由客户端返回到池时存储“最后使用时间”。在将连接移交给客户端之前,池将检查自“上次使用时间”以来的时间间隔是否少于3分钟(假设默认TCP空闲连接超时为5分钟)。

我的理解和实现是否正确?

回答

2

这里是我会做什么:

如果这样做失败,那么我的连接就死定了。然后GenericObjectPool会自动调用工厂来创建一个全新的连接(#makeObject)来替换死掉的连接。