spring与多个defaultmessagelistenercontainer(带有transactionManager)和多个<jms:outbound-channel-adapter>和

时间:2018-03-28 19:17:19

标签: spring-integration ibm-mq spring-jms

我有一个Spring集成应用程序,需要2 DefaultMessageListenerContainertransactionManager}和2 jms:outbound-channel-adapter

我已使用"property name="connectionFactory" ref="jmsConnectionFactory""property name="transactionManager" ref="platformTransactionManager"配置每个侦听器容器。

但对于事务管理器,我再次使用了不同的jmsConnectionFactory。我没有在侦听器容器中使用CachingConnectionFactory,而是在platformTransactionManager中使用它。对于jms:outbound-channel-adapter我再次使用我在侦听器容器中使用的jmsConnectionFactory

我的问题是,通过这种配置,我正在努力。超高限制(150)的连接到高负载条件下的MQ通道。

我尝试了很多不同的方法,但我没有看到没有。连接下降后,使用cachingFactory

的以下配置
CachingConnectionFactory cachingConnectionFactory = new 
CachingConnectionFactory(factory);
    cachingConnectionFactory.setCacheConsumers(true);
    cachingConnectionFactory.setCacheProducers(true);
    cachingConnectionFactory.setSessionCacheSize(16);`

我试过

1)在jmsConnectionFactorylistenerContainer之间共享platformTransactionManager,但txn无法正常工作,因为我看到邮件的发送顺序不正确

2)使用cachingConenctionFactory in the listenerContainer`,但我仍然看到相同的no。连接

我应该为听众,jmsConnectionFactory和发件人使用3个不同的txnmanager吗?

这里最好的配置是什么,请提出建议,非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为使用IBM MQ时,您无法使用CachingConnectionFactory,而是将其作为:

<bean id="connectionFactory" class="org.springframework.jms.connection.DelegatingConnectionFactory">
    <property name="targetConnectionFactory" ref="imbMqFactory"/>
    <property name="shouldStopConnections" value="true"/>
</bean>

必须从TX管理器和容器中使用此单connectionFactory