Estamos utilizando ThreadPoolExecutor en nuestro consumidor JMS e inyectarlo en un DefaultMessageListenerContainer. Espero que esto se ejecute hilos concurrentes para muchos mensajes, pero nuestros registros muestran que la identificación del hilo no cambiará. Nuestro registro muestra que para el procesamiento diferente de mensajes, el ID del hilo es siempre el mismo en 24.primavera ThreadPoolTaskExecutor sólo se ejecuta un hilo
Esto es la configuración de resorte en ese escenario:
<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>
Después de no inyección de la haba threadPoolExectuor en el DefaultMessageListenerContainer, los mensajes están siendo ejecutado en diferentes hilos.
Esta es la configuración resultante:
<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"
>
he tratado de leer la documentación y no entiendo por qué ocurre esto. ¿Alguna explicación?
No estoy de acuerdo con jms, pero ¿has intentado enviar muchos mensajes al mismo tiempo? Supongo que el mecanismo aquí es iniciar un nuevo hilo solo a pedido (es decir, no hay un hilo inactivo y viene un nuevo mensaje). –
Sí, sí intenté enviar muchos mensajes al mismo tiempo, solo algunos mensajes tardan mucho tiempo en procesarse. – Jeune