Spring ThreadPoolTaskExecutor 只运行一个线程
我们在 JMS 使用者中使用 ThreadPoolExecutor,并将其注入 DefaultMessageListenerContainer。我希望这会为许多消息运行并发线程,但是我们的日志显示线程ID不会更改。我们的日志记录显示,对于不同的消息处理,线程 ID 在 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 bean 注入 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"
>
我尝试过阅读文档,但我不明白为什么会发生这种情况。有什么解释吗?