Spring的DefaultMessageListenerContainer中taskExecutor属性的用途

时间:2013-04-10 09:15:19

标签: spring spring-jms

Spring的DefaultMessageListenerContainer(DMLC)具有concurrentConsumertaskExecutor属性。 taskExecutor bean可以被赋予corePoolSize属性。那么指定concurrentConsumer和corePoolSize之间的区别是什么?当concurrentConsumer属性被定义时,它意味着Spring将创建指定数量的consumer / messageListeners来处理消息。 corePoolSize什么时候出现?

代码段

<bean id="myMessageListener"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="myQueue" />
    <property name="messageListener" ref="myListener" />
    <property name="cacheLevelName" value="CACHE_CONSUMER"/>
    <property name="maxConcurrentConsumers" value="10"/>
    <property name="concurrentConsumers" value="3"/>
    <property name="taskExecutor" ref="myTaskExecutor"/>
</bean>

 <bean id="myTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
    <property name="corePoolSize" value="100"/>
    <property name="maxPoolSize" value="100"/>
    <property name="keepAliveSeconds" value="30"/>
     <property name="threadNamePrefix" value="myTaskExecutor"/>
</bean>

1 个答案:

答案 0 :(得分:0)

根据4.3.6版本,taskExecutor包含负责消息处理的AsyncMessageListenerInvoker实例。 corePoolSize是已定义池中的多个物理线程,而concurrentConsumer是此池中的许多任务。我想这个抽象是为了更灵活的控制而设计的。