2013-04-10 19 views
8

Spring's DefaultMessageListenerContainer (DMLC) ha concurrentConsumer e taskExecutor proprietà. Il bean taskExecutor può essere assegnato alla proprietà corePoolSize. Qual è allora la differenza tra la specifica di concurrentConsumer e corePoolSize? Quando viene definita la proprietà concurrentConsumer significa che Spring creerà il numero specificato di consumer/messageListeners per elaborare il messaggio. Quando corePoolSize entra in scena?Scopo della proprietà taskExecutor in Spring's DefaultMessageListenerContainer

Snippet di codice

<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> 

risposta

0

Secondo 4.3.6 versione, il taskExecutor contiene le istanze di AsyncMessageListenerInvoker quale responsabile per l'elaborazione dei messaggi. corePoolSize è un numero di thread fisici nel pool definito, mentre concurrentConsumer è un numero di attività in questo pool. Immagino che questa astrazione sia stata progettata per un controllo più flessibile.

Problemi correlati