与IBM MQ客户端的JMS连接池

与IBM MQ客户端的JMS连接池,jms,ibm-mq,spring-jms,Jms,Ibm Mq,Spring Jms,我们在IBM MQ 9.x服务器和IBM MQ客户端之间使用MQIPT 9.2。我们还使用Java中的IBMMQ客户机jar连接到队列管理器,以推送和接收消息,这很正常。然而,创建连接需要时间,如果我们及时创建连接,每次都需要时间 我们如何为IBM MQ实现JMS连接池 以下描述了我们的连通性: []1 有没有标准的方法来实现连接池 使用下面的代码 System.out.println(“>”); 试一试{ //为信任库创建密钥库对象 keystoretruststore=KeyStore.ge

我们在IBM MQ 9.x服务器和IBM MQ客户端之间使用MQIPT 9.2。我们还使用Java中的IBMMQ客户机jar连接到队列管理器,以推送和接收消息,这很正常。然而,创建连接需要时间,如果我们及时创建连接,每次都需要时间

我们如何为IBM MQ实现JMS连接池

以下描述了我们的连通性:

[]1

有没有标准的方法来实现连接池

使用下面的代码

System.out.println(“>”);
试一试{
//为信任库创建密钥库对象
keystoretruststore=KeyStore.getInstance(“JKS”);
char[]keyPassphrase=“*******”.toCharArray();
加载(新文件输入流)(
“JKS文件路径”),
密钥短语);
TrustManagerFactory TrustManagerFactory=TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
init(信任库);
SSLContext SSLContext=SSLContext.getInstance(“TLS”);
sslContext.init(null,trustManagerFactory.getTrustManagers(),null);
SSLSocketFactory SSLSocketFactory=sslContext.getSocketFactory();
System.out.println(“消息发送中加载的SSL证书”);
//创建默认MQ连接工厂
MQQueueConnectionFactory=新MQQueueConnectionFactory();
工厂.setTransportType(WMQConstants.WMQ\u CM\u客户端);
factory.setQueueManager(QMGRNAME);
setHostName(主机名);
工厂设置通道(通道);
工厂设置端口(1414);
工厂。需要设置SLFIPSRequired(假);
工厂。SetssSocketFactory(sslSocketFactory);
工厂设置ClientReconnectTimeout(100);
factory.setStringProperty(WMQConstants.USERID,用户);
factory.setStringProperty(WMQConstants.PASSWORD,PASSWORD);
setBooleanProperty(WMQConstants.USER\u AUTHENTICATION\u MQCSP,true);
factory.setStringProperty(WMQConstants.WMQ_SSL_CIPHER_SUITE,“CIPHER SUITE”);
mqConnection=(MQQueueConnection)工厂。createQueueConnection();
MQQueueSession会话=(MQQueueSession)mqConnection.createQueueSession(false,
会话(自动确认);
//启动连接
System.out.println(“发送消息时连接启动”);
mqConnection.start();
System.out.println(“发送消息时连接已启动”);
对于(int i=0;i您可以使用:

<bean class="org.apache.activemq.jms.pool.PooledConnectionFactory"
       id="source.pooledConnectionFactory" primary="true">
    <property name="maxConnections" value="1"/>
    <property name="idleTimeout" value="0"/>
    <property name="connectionFactory" ref="factory"/>
</bean>
    <dependency>
        <groupId>org.messaginghub</groupId>
        <artifactId>pooled-jms</artifactId>
        <version>1.1.0</version>
    </dependency>


    JmsPoolConnectionFactory pooledCF = new JmsPoolConnectionFactory();
    
    pooledCF.setConnectionFactory(connectionFactory());
    pooledCF.setMaxConnections(1);

(很抱歉在发布JavaDSL时使用了XML,但你明白了)。基本上,用ActiveMQ JMS池连接工厂包装连接工厂

或者,您可以使用:

<bean class="org.apache.activemq.jms.pool.PooledConnectionFactory"
       id="source.pooledConnectionFactory" primary="true">
    <property name="maxConnections" value="1"/>
    <property name="idleTimeout" value="0"/>
    <property name="connectionFactory" ref="factory"/>
</bean>
    <dependency>
        <groupId>org.messaginghub</groupId>
        <artifactId>pooled-jms</artifactId>
        <version>1.1.0</version>
    </dependency>


    JmsPoolConnectionFactory pooledCF = new JmsPoolConnectionFactory();
    
    pooledCF.setConnectionFactory(connectionFactory());
    pooledCF.setMaxConnections(1);

org.messaginghub
池jms
1.1.0
JmsPoolConnectionFactory pooledCF=新的JmsPoolConnectionFactory();
setConnectionFactory(connectionFactory());
pooledCF.setMaxConnections(1);

org.messaginghub
项目是ActiveMQ代码的一个分支,没有ActiveMQ依赖项。

您是独立运行jns应用程序还是在J2EE应用程序服务器中运行jns应用程序?您能在MQ客户端中显示与JMS相关的代码吗?添加了相关的代码。我们也将其用于Camel JMS路由,但Camel正在为每个mess创建新的连接ageSpring有一个缓存连接工厂,这是您可以使用的吗?Doug,他使用的是IBM MQ而不是ActiveMQ。ActiveMQ JMS池连接工厂与IBM MQ连接工厂一起工作吗?是的。请注意,是“org.apache.ActiveMQ.JMS”(JMS)变体。它设计用于包装任何JMS连接工厂。还有另一个变体是专门为ActiveMQ连接工厂设计的。messaginghub的
分支几乎相同,删除了连接超时。对于感兴趣的人。如何使用上面的池JMSA设置最大连接限制
setMaxConnections()
函数。但是,请注意,Spring JMS代码将创建一个连接,然后在该连接上启动多个JMS会话。