如何在独立的 Java 应用程序中汇集 JMS 连接?
Posted
技术标签:
【中文标题】如何在独立的 Java 应用程序中汇集 JMS 连接?【英文标题】:How to pool the JMS connection in a standalone Java application? 【发布时间】:2012-02-13 21:25:37 【问题描述】:我们正在开发一个 IBM WebSphere MQ 应用程序,我们使用 JMS API 来操作消息。但是我们有一个问题是连接耗时太长,我们想对 JMS 连接进行池化,因为它是一个独立的应用程序,我们没有应用程序容器来提供 JNDI 或池化服务。那么有没有办法解决这个问题呢?对于JDBC我们可以使用DBCP或者c3p0来归档池化数据源,在JMS中,有没有类似的项目可以池化JMS连接?
【问题讨论】:
【参考方案1】:以前是 JMS MQConnectionFactory 内置了池化,但似乎在版本 7 中已将其删除。
在早期版本的 WebSphere 中设置使用 ConnectionPooling JMS 的 MQ 类。保留此方法是为了兼容 较旧的 MQJMS 应用程序,但是,因为这个连接池 功能已从版本 7 中删除,设置此属性 不会有任何影响。
如果没有其他内容,您可以使用Apache Commons Pool。与 DBCP(使用 Pool)相同,但用于非 JDBC 对象。
【讨论】:
似乎 Apache Commons Pool 对我来说是可能的方法。谢谢。 谢谢,我试过 springCachingConnectionFactory
但它失败了。但是,鉴于我们使用的是 wmq 版本 6,我将尝试使用原生池 - setUseConnectionPooling(true)
【参考方案2】:
Spring 的 CachingConnectionFactory 非常适合这个用例。 https://***.com/a/31119435/1765341 中的这个答案解释了如何在 Tomcat 中执行此操作,但那里的代码可以很容易地适用于 Java 独立应用程序。这应该比编写 Apache Commons Pool 实现更容易(并且更不容易出错)。
【讨论】:
以上是关于如何在独立的 Java 应用程序中汇集 JMS 连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Websphere 服务器连接到 Weblogic JMS?