如何在独立的 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 对我来说是可能的方法。谢谢。 谢谢,我试过 spring CachingConnectionFactory 但它失败了。但是,鉴于我们使用的是 wmq 版本 6,我将尝试使用原生池 - setUseConnectionPooling(true)【参考方案2】:

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

【讨论】:

以上是关于如何在独立的 Java 应用程序中汇集 JMS 连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Websphere 服务器连接到 Weblogic JMS?

将独立 JMS 应用程序移植到 Web/应用程序服务器

使 JMS 消息出列的独立 Java [关闭]

对于独立应用程序(对于 Spring JMS),Java main 方法应该是啥?

使用 Java 1.6 通过 JMS 连接到 SQS

如何从运行在 WebSphere 应用程序服务器 v7 上的 Web 应用程序通过 JMS 连接到 Web 方法?