Мы используем ThreadPoolExecutor в нашем клиенте JMS и внедряем его в DefaultMessageListenerContainer. Я ожидаю, что во многих сообщениях будут запущены параллельные потоки, однако наши журналы показывают, что идентификатор потока не изменится. Наши журналы показывают, что для различной обработки сообщений идентификатор потока всегда одинаков при 24.
Это конфигурация пружины в этом сценарии:
<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"
>
Я попытался прочитать документацию, и я не понимаю, почему это происходит. Любое объяснение?