DefaultJmsListnerContainerFactory concurrency not working

153 Views Asked by At

This is my JMS configuration:

@EnableJms
@Configuration
public class VmsJmsConfig implements JmsListenerConfigurer {

    @Value("${spring.activemq.broker-url}")
    String brokerUrl;
    @Value("${spring.activemq.ssl.trustStorePath}")
    String trustStorePath;
    @Value("${spring.activemq.ssl.trustStorePass}")
    String trustStorePass;

    @Bean
    public DefaultJmsListenerContainerFactory defaultJmsListenerContainerFactory(ConnectionFactory conFactory) {
        DefaultJmsListenerContainerFactory defaultJmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();

        defaultJmsListenerContainerFactory.setConnectionFactory(conFactory);
        defaultJmsListenerContainerFactory.setConcurrency("10-20");
        return defaultJmsListenerContainerFactory;
    }

    @Bean("conFactory")
    public ConnectionFactory activeMQSslConnectionFactory() throws Exception {
        ActiveMQSslConnectionFactory activeMQSslConnectionFactory = new ActiveMQSslConnectionFactory(brokerUrl);
        activeMQSslConnectionFactory.setTrustStore(trustStorePath);
        activeMQSslConnectionFactory.setTrustStorePassword(trustStorePass);

        return activeMQSslConnectionFactory;
    }

    @Bean
    public DefaultMessageHandlerMethodFactory handlerMethodFactory() {
        DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
        factory.setMessageConverter(messageConverter());
        return factory;
    }

    @Bean
    public MessageConverter messageConverter() {
        return new MappingJackson2MessageConverter();
    }

    @Override
    public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
        registrar.setMessageHandlerMethodFactory(handlerMethodFactory());
    }
}

My app is listening to an ActiveMQ queue. It consumes a message, transforms it, sends a downstream request, waits for the response, and sends that response to another queue.

I want it to consume multiple messages at the same time and process them in parallel, but no matter how many consumer I set in setConcurrency() it only consumes 1 message at a time, and there are more than 1000 messages pending in queue.

I tried changing the concurency, but no luck. But when I comment downstream call, it consumes 10-20 messages at a time, I couldn't find reason for that.

0

There are 0 best solutions below