Назначение свойства taskExecutor в Spring DefaultMessageListenerContainer

DefaultMessageListenerContainer Spring (DMLC) имеет concurrentConsumer и taskExecutor свойство. Компоненту taskExecutor может быть присвоен corePoolSize свойство. В чем тогда разница между указанием concurrentConsumer и corePoolSize? Когда свойство concurrentConsumer определено, это означает, что Spring создаст указанное количество потребителей/прослушивателей сообщений для обработки сообщения. Когда появляется 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>

person Gaurav    schedule 10.04.2013    source источник


Ответы (1)


Согласно версии 4.3.6, taskExecutor содержит экземпляры AsyncMessageListenerInvoker, отвечающие за обработку сообщений. corePoolSize — это количество физических потоков в определенном пуле, а concurrentConsumer — это количество задач в этом пуле. Я предполагаю, что эта абстракция была разработана для более гибкого управления.

person Andrei Kovrov    schedule 15.08.2017