В нашем приложении мы используем SingleConnectionFactory с DefaultMessageListenerContainer, потребляющим данные с сервера IBM MQ, с точки зрения производительности приложение довольно неплохо, однако в конце MQ наше приложение случайным образом открывает слишком много новых соединений.Вот текущая конфигурация, которую мы имеем.
<bean id="primary" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="primaryConnectionFactory"/>
<property name="destinationName" value="CCS.COMM.FEED.FULFILLMENT"/>
<property name="transactionManager" ref="primaryTransactionManager" />
<property name="sessionTransacted" value="true" />
<property name="concurrentConsumers" value="10" />
<property name="maxConcurrentConsumers" value="10" />
<property name="autoStartup" value="true" />
<property name="recoveryInterval" value="60000" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
</bean>
<bean id="primaryConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="primaryRawInputConnectionFactory" />
<property name="reconnectOnException" value="true" />
</bean>
Мы исправили проблему с утечкой соединения с MQ, используя cachingConnectionFactory, однако производительность снижается при следующих настройках.
<bean id="inboundConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="inboundConnectionFactoryAdapter" />
<property name="sessionCacheSize" value="10" />
</bean>
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="inboundConnectionFactory" />
</bean>
<bean id="inboundListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="inboundConnectionFactory"/>
<property name="destinationName" value="CCS.COMM.FEED.FULFILLMENT"/>
<property name="transactionManager" ref="jmsTransactionManager" />
<property name="sessionTransacted" value="true" />
<property name="concurrentConsumers" value="10" />
<property name="maxConcurrentConsumers" value="10" />
<property name="autoStartup" value="true" />
Не могли бы вы, пожалуйстаподскажите, что можно сделать, чтобы улучшить производительность ...