Исходящий канал-адаптер / Spring JMS, запускающий слишком много MQ-соединений - PullRequest
0 голосов
/ 30 сентября 2019

Я использую jms: исходящий канал-адаптер. Мы заметили, что сервер приложений запускает слишком много MQ-соединений. Приложение в конечном счете исчерпывает ограничение maxChannel сервера MQ и начинает получать:

Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2537' ('MQRC_CHANNEL_NOT_AVAILABLE')

Я использую MQTopicConnectionFactory, CachingConnectionFactory, адаптер исходящего канала .

Текущая конфигурация:

<bean id="mqQueueConnectionFactory" class="com.ibm.mq.jms.MQTopicConnectionFactory">
   <property name="SSLCipherSuite" value="${mq.sslCipherSuite}"/>
   <property name="hostName" value="${mq.hostName}"/>
   <property name="port" value="${mq.port}"/>
   <property name="channel" value="${mq.channel}"/>
   <property name="transportType" value="1"/>
</bean>
<bean id="cachedConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory"
    p:targetConnectionFactory-ref="jmsTConnectionFactory"
    p:reconnectOnException="true" p:sessionCacheSize="10"
    p:cacheProducers="true" />  
<bean id="senderTopic" class="com.ibm.mq.jms.MQTopic" > 
    <constructor-arg value="${mq.topicName}"/>  
</bean> 
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
   <property name="connectionFactory">
      <ref bean="cachedConnectionFactory" />
   </property>
   <property name="defaultDestination">
      <ref bean="senderTopic" />
   </property>
</bean>

Адаптер исходящего канала:

<int-jms:outbound-channel-adapter
    id="jmsOutToNE" channel="umpAlertNotificationJMSChannel"
    destination="senderTopic" jms-template="jmsQueueTemplate">
    <!-- <int:retry-advice/> -->
</int-jms:outbound-channel-adapter>

Поток интеграции пружины, имеющий 250 одновременных потоков, однако при пиковой нагрузке существует более 2000 соединений MQ, запускающихся при максимальной нагрузке.

Какое значение sessionCacheSize = "10" в CachingConnectionFactory, если количество соединений превышает 500?

Как я могу ограничить количество соединений MQ?

Не может ли JMS повторно использовать соединение MQ из пула, как работают соединения с БД?

...