【问题标题】:How to pool the JMS connection in a standalone Java application?如何在独立的 Java 应用程序中汇集 JMS 连接?
【发布时间】:2012-02-13 21:25:37
【问题描述】:

我们正在开发一个 IBM WebSphere MQ 应用程序,我们使用 JMS API 来操作消息。但是我们有一个问题是连接耗时太长,我们想对 JMS 连接进行池化,因为它是一个独立的应用程序,我们没有应用程序容器来提供 JNDI 或池化服务。那么有没有办法解决这个问题呢?对于JDBC我们可以使用DBCP或者c3p0来归档池化数据源,在JMS中,有没有类似的项目可以池化JMS连接?

【问题讨论】:

    标签: jms ibm-mq mq pooling


    【解决方案1】:

    以前是 JMS MQConnectionFactory 内置了池化,但似乎在版本 7 中已将其删除。

    在早期版本的 WebSphere 中设置使用 ConnectionPooling JMS 的 MQ 类。保留此方法是为了兼容 较旧的 MQJMS 应用程序,但是,因为这个连接池 功能已从版本 7 中删除,设置此属性 不会有任何影响。

    如果没有其他内容,您可以使用Apache Commons Pool。与 DBCP(使用 Pool)相同,但用于非 JDBC 对象。

    【讨论】:

    • 似乎 Apache Commons Pool 对我来说是可能的方法。谢谢。
    • 谢谢,我试过 spring CachingConnectionFactory 但它失败了。但是,鉴于我们使用的是 wmq 版本 6,我将尝试使用原生池 - setUseConnectionPooling(true)
    【解决方案2】:

    Spring 的 CachingConnectionFactory 非常适合这个用例。 https://stackoverflow.com/a/31119435/1765341 中的这个答案解释了如何在 Tomcat 中执行此操作,但那里的代码可以很容易地适用于 Java 独立应用程序。这应该比编写 Apache Commons Pool 实现更容易(并且更不容易出错)。

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多