【问题标题】:JMS connection & session poolingJMS 连接和会话池
【发布时间】: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


    【解决方案1】:

    我会这样做:

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

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 2015-01-03
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多