делает @jmslistener с тем же пулом потоков фабрики контейнера - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть 2 jmsliteners, настроенные так при весенней загрузке:

@EnableJms

@JmsListener(id= "A1", destination = "dest1", containerFactory = "factory1")
@JmsListener(id= "A2", destination = "dest2", containerFactory = "factory1") 
public void onMessage(String request) {
    //some processing
}

@Bean(name = "factory1")
public JmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory cachingConnectionFactory){
 DefaultJmsListenerContainerFactory jmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();
    jmsListenerContainerFactory.setConnectionFactory(cachingConnectionFactory);
    jmsListenerContainerFactory.setConcurrency("2-10");
    jmsListenerContainerFactory.setSessionTransacted(true);
    jmsListenerContainerFactory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    return jmsListenerContainerFactory;
}

Поскольку 2 jmslisteners имеют разные идентификаторы, но используют один и тот же containerFactory, эти два jmslisteners разделяют один и тот же пул потоков?

IE, если у меня есть 100 сообщений в dest1 и 1 сообщение в dest2, возможно ли, что все доступные потоки будут заняты слушателем a1, и слушатель a2 не сможет работать до большинства сообщенийв a1 потребляются?

В идеале эти 2 должны работать параллельно, и я не хочу создавать некоторые асинхронные будущие задачи в моей обработке.

1 Ответ

0 голосов
/ 12 сентября 2018

Они независимы;по умолчанию каждый из них использует отдельный SimpleAsyncTaskExecutor.

. Фабрику можно настроить с TaskExecutor, и контейнеры будут использовать один и тот же, но, если это исполнитель пула, у него должно быть достаточно потоков, чтобыподдерживать общий максимальный параллелизм всех слушателей.

...