Spring Integration не освобождает соединения при использовании max-concurrent-consumer - PullRequest
0 голосов
/ 10 мая 2019

Я использую 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;
    }
...