Мы используем ThreadPoolExecutor в нашем JMS-клиенте и вставляем его в DefaultMessageListenerContainer. Я ожидаю, что это приведет к одновременным потокам для многих сообщений, однако наши журналы показывают, что идентификатор потока не изменится. Наш журнал показывает, что для различной обработки сообщений идентификатор потока всегда одинаковый на 24.Spring ThreadPoolTaskExecutor работает только один поток
Это конфигурация пружины в этом сценарии:
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:connectionFactory-ref="cachedConnectionFactory"
p:destination-ref="formsCRRDestination"
p:messageListener-ref="formServicePojo"
p:concurrentConsumers="5"
p:idleTaskExecutionLimit="1"
p:maxConcurrentConsumers="25"
p:taskExecutor-ref="threadPoolExecutor"
destroy-method="doShutdown"
>
<bean id="threadPoolExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
<property name="corePoolSize" value="1"/>
<property name="maxPoolSize" value="15"/>
<property name="keepAliveSeconds" value="30"/>
</bean>
После не вводя боб threadPoolExectuor в DefaultMessageListenerContainer, сообщения в настоящее время выполняются в разных потоках.
Это результирующая конфигурация:
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:connectionFactory-ref="cachedConnectionFactory"
p:destination-ref="formsCRRDestination"
p:messageListener-ref="formServicePojo"
p:concurrentConsumers="5"
p:idleTaskExecutionLimit="1"
p:maxConcurrentConsumers="25"
destroy-method="doShutdown"
>
Я попытался чтения документации, и я не понимаю, почему это происходит. Любое объяснение?
Я не в jms, но вы пытались отправить много сообщений одновременно? Я предполагаю, что механизм здесь состоит в том, чтобы начать новый поток только по требованию (т. Е. Нет простоя и появляется новое сообщение). – 2010-11-24 17:21:53
Да, я попытался отправить много сообщений одновременно, только некоторые сообщения занимают много времени. – Jeune 2010-11-24 17:24:25