sql >> Base de Datos >  >> RDS >> Oracle

Enfoque correcto para inicializar un JMS Listener asíncrono y dejar que se ejecute infinitamente

No hay motivo para ejecutar un subproceso para crear un consumidor JMS y establecer su detector de mensajes. El objetivo de un detector de mensajes JMS es recibir mensajes de forma asincrónica (funcionalidad que parece estar tratando de duplicar por algún motivo).

Simplemente necesita crear el consumidor JMS y configurar el detector de mensajes y luego asegurarse de que el consumidor no esté cerrado. Dependiendo de cómo esté escrita la aplicación, a veces es necesario tener un while loop para asegurarse de que el programa no termine y, por lo tanto, cierre el consumidor. Tu hilo no está haciendo eso. Está dejando que el consumidor quede fuera del alcance después de esperar mensajes durante 5 segundos, lo que significa que se recolectará como basura y espero que para la mayoría de las implementaciones de JMS eso signifique que se cerrará. Sin embargo, podría ser peor que eso. Si no cierra explícitamente al consumidor y simplemente lo deja fuera de alcance, podría estar filtrando consumidores, lo que eventualmente atascaría su agente de mensajes. Esto no solo es una programación descuidada, sino que también es potencialmente problemático para otros usuarios que intentan consumir mensajes.