我們在我們的JMS使用者中使用ThreadPoolExecutor並將它注入到DefaultMessageListenerContainer中。我期望這是爲許多消息運行併發線程,但是我們的日誌顯示線程ID不會改變。我們的日誌記錄顯示,對於不同的消息處理,線程ID在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