Я использую Spring-интеграцию для чтения сообщений из IBM MQ. Поскольку объем сообщений высок, я настроил max-concurrent-consumer = 10 . Потребители наткнулись и работают нормально.
Проблема в том, что соединения не освобождаются, когда они больше не нужны.
Когда все 10 потребителей используются, из MQ Explorer я вижу 10 потоков, подключенных (Open input count) к очереди. Но количество потоков (соединений) никогда не возвращается к 1, когда в очереди нет сообщений. MQ Explorer по-прежнему показывает 10 потоков, подключенных к очереди.
Кто-нибудь здесь сталкивался с такой вещью и имел решение?
Цените свое время.
<jms:inbound-gateway id="mdmDemoInboundGateway"
request-destination="mdmDemoQueue"
error-channel="demoErrorChannel"
request-channel="mdmDemoChannel"
concurrent-consumers="1"
max-concurrent-consumers="10"
connection-factory="mdmJmsQueueConnectionFactory"/>
@Bean
public MQQueueConnectionFactory mdmMqQueueConnectionFactory(
@Value("${mq.mdm.host}") String host,
@Value("${mq.mdm.port}") String port,
@Value("${mq.mdm.channel}") String channel,
@Value("${mq.mdm.queue-manager}") String queueManager) {
MQQueueConnectionFactory mqConnectionFactory = new MQQueueConnectionFactory();
mqConnectionFactory.setHostName(host);
try {
mqConnectionFactory.setPort(Integer.parseInt(port));
mqConnectionFactory.setQueueManager(queueManager);
mqConnectionFactory.setChannel(channel);
mqConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
mqConnectionFactory.setCCSID(1208);
} catch (JMSException ex) {
log.error("Error creating MQQueueConnectionFactory ", ex);
}
return mqConnectionFactory;
}
@Bean
public UserCredentialsConnectionFactoryAdapter mdmJmsQueueConnectionFactory(
@Qualifier("mdmMqQueueConnectionFactory") ConnectionFactory mdmMqQueueConnectionFactory,
@Value("${mq.mdm.user}") String username,
@Value("${mq.mdm.password}") String password) {
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
userCredentialsConnectionFactoryAdapter.setUsername(username);
userCredentialsConnectionFactoryAdapter.setPassword(password);
userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mdmMqQueueConnectionFactory);
return userCredentialsConnectionFactoryAdapter;
}