Spring boot SimpleJmsListenerEndpoint Параметр параллелизма не работает - PullRequest
1 голос
/ 27 марта 2020

Фрагмент кода из моего проекта выглядит следующим образом. Я пытаюсь подключиться к IBM MQ QM и получать сообщения. Я настраиваю слушателей программно, где я устанавливаю параллелизм как 5-10. Не возникает проблем с подключением к очереди, но сеансы прослушивателя всегда находятся в верхнем пределе очереди (10 здесь). Я предполагаю, что он всегда должен начинаться с 5, а затем увеличиваться до 10 при увеличении громкости. Я пробовал то же самое с очередью Tibco EMS, и то же самое. Не уверен, что я делаю не так, и не могу найти здесь обсуждения, которое могло бы помочь Любые полезные указатели очень ценятся.

@Slf4j
@Component
public class ConsumerConfig 
{   
    @Value("${wmq.reqQueue}")
    String partnerReqReceiverDestination;

    @Value("${wmq.requestConcurrency}")
    String partnerReqReceiverConcurrency;

    private final JmsListenerEndpointRegistry wmqListenerEndpointRegistry = new JmsListenerEndpointRegistry();  

    public MQQueueConnectionFactory mqQueueConnectionFactory() throws Exception 
    {
       System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings",ibmMqConfig.getUseIBMCipherMappings());   
       System.setProperty("javax.net.ssl.trustStore",ibmMqConfig.getTrustStore());  
       System.setProperty("javax.net.ssl.trustStorePassword",ibmMqConfig.getTrustStorePassword());
       System.setProperty("javax.net.ssl.keyStore",ibmMqConfig.getKeyStore());   
       System.setProperty("javax.net.ssl.keyStorePassword",ibmMqConfig.getKeyStorePassword());

       MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();      
       try 
        {   
            mqQueueConnectionFactory.setHostName(ibmMqConfig.getHostname());
            mqQueueConnectionFactory.setQueueManager(ibmMqConfig.getQueueManager());
            mqQueueConnectionFactory.setPort(ibmMqConfig.getPort());
            mqQueueConnectionFactory.setChannel(ibmMqConfig.getChannel());
            mqQueueConnectionFactory.setSSLCipherSuite(ibmMqConfig.getSslCipherSuites());
            mqQueueConnectionFactory.setCCSID(ibmMqConfig.getCcsid());
            mqQueueConnectionFactory.setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT);
            mqQueueConnectionFactory.setClientReconnectTimeout(ibmMqConfig.getClientReconnectTimeout());
            mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);

        catch (Exception ex) 
        {
            throw new Exception(ExceptionUtils.getStackTrace(ex)); 
        }
        return mqQueueConnectionFactory;
    }

     public SimpleJmsListenerContainerFactory wmqListenerContainerFactory() throws Exception
     {      
        SimpleJmsListenerContainerFactory wmqContainerFactory = new SimpleJmsListenerContainerFactory();        
        wmqContainerFactory.setConnectionFactory(mqQueueConnectionFactory());
        wmqContainerFactory.setDestinationResolver(new DynamicDestinationResolver());
        wmqContainerFactory.setPubSubDomain(Boolean.FALSE);
        wmqContainerFactory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
        return wmqContainerFactory;
     }

     public void configureWmqListeners()
        {   
          SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();   
             endpoint.setId(sourceRegion + "-" + String.valueOf(Thread.currentThread().getId()));
             endpoint.setDestination(this.partnerReqReceiverDestination);   
             endpoint.setConcurrency(this.partnerReqReceiverConcurrency);   
             endpoint.setMessageListener(testRequestHandler);
             try 
             {  
                this.wmqListenerEndpointRegistry.registerListenerContainer(endpoint,wmqListenerContainerFactory());     
             }
             catch (Exception ex)
             {              
                throw(ex);
             }      
          this.wmqListenerEndpointRegistry.start();
        }
...