JMS连接&会话池

时间:2017-02-27 09:36:10

标签: java tcp jms connection-pooling

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

在任何对象池中,我们需要在将对象返回到客户端之前确定该对象是否正常。 JMS似乎没有提供“isHealthy()”方法。此外,我无法依赖ExceptionListener主要是因为我不确定JMS提供程序实现,并且ExceptionListener调用也是异步的。我想知道如果在调用onException之前将连接移交给客户端会发生什么。

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

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

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

1 个答案:

答案 0 :(得分:2)

以下是我要做的事情:

如果失败,那么我的连接已经死了。然后,GenericObjectPool会自动调用工厂来创建一个全新的连接(#getEnumeration)来替换死亡的连接。