2013-04-10 3 views
8

Die DefaultMessageListenerContainer (DefaultMessageListenerContainer) (DMLC) hat concurrentConsumer und taskExecutor Eigentum. Der TaskExecutor-Bean kann die Eigenschaft corePoolSize erhalten. Was ist der Unterschied zwischen der Angabe von concurrentConsumer und corePoolSize? Wenn die Eigenschaft concurrentConsumer definiert ist, bedeutet dies, dass Spring eine bestimmte Anzahl von customer/messageListeners zur Verarbeitung der Nachricht erstellt. Wann kommt corePoolSize ins Bild?Zweck der Eigenschaft taskExecutor in Spring's DefaultMessageListenerContainer

Code-Snippet

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

Antwort

0

Nach 4.3.6 Version, die taskExecutor enthält Instanzen von AsyncMessageListenerInvoker die für die Nachrichtenverarbeitung verantwortlich. corePoolSize ist eine Anzahl von physischen Threads im definierten Pool, während concurrentConsumer eine Reihe von Aufgaben in diesem Pool ist. Ich denke, diese Abstraktion wurde für eine flexiblere Kontrolle konzipiert.