2010-10-29 9 views
5

Estoy intentando escribir una implementación multiproceso para el procesamiento de mensajes JMS desde una cola.Recepción de subprocesos JMS en Spring

He intentado con las clases DefaultMessageListenerContainer y SimpleMessageListenerContainer.

El problema que tengo es que parece que solo una instancia de la clase MessageListener se instancia alguna vez, sin importar cómo la configuro. Esto me obliga a escribir innecesariamente implementaciones de MessageListener sin estado o sin subprocesos, ya que tengo el ListenerContainer configurado para usar varios subprocesos (concurrentConsumers = 8).

¿Hay una solución obvia a esto que estoy pasando por alto?

Respuesta

5

Esto es por diseño. El MessageListener es una dependencia que se inyecta en Spring; no tiene forma de crear instancias nuevas.

Esto obliga a que escriba innecesariamente implementaciones MessageListener sin estado o compatibles con el proceso

Haces que suene como una cosa mala. Hacer su MessageListener es una muy buena idea, Spring simplemente elimina la tentación de hacer lo contrario.

+0

No entiendo. Estoy haciendo mi MessageListener. Solo quiero aprovechar los múltiples núcleos de mi máquina para procesar cosas en paralelo. –

+2

@Iker: Sí, y MessageListenerContainer generará múltiples hilos para hacer esto, con todos los hilos usando la misma instancia de su 'MessageListener'. Engendrar oyentes múltiples es ineficiente e innecesario. – skaffman

+0

Ok, eso lo entiendo. Pero digamos que para cada mensaje JMS debe procesar un trabajo que lleva unos segundos. Quiero poder usar un conjunto de instancias completamente separadas para procesar cada uno de los mensajes. ¿Debería generar hilos del MessageListener entonces? –

1

Configuración "concurrentConsumers" es justo lo suficiente para procesar mensajes a la vez. Esto no significa que tendrá "n" instancias de MessageListenerContainer. El MessageListenerContainer puede abarcar "tareas" internamente para procesar los mensajes. Opcionalmente, puede que tenga que configurar su registro en consecuencia para ver la información asociada con las tareas/hilos subyacentes. Para obtener más información, consulte "Tuning JMS message consumption in Spring".

Cuestiones relacionadas