Plantilla de lectura de tiempo para JMS en IBM MQ.
Tengo la necesidad de implementar una lectura cronometrada de un ibm mq.
Tengo una aplicación cliente que lee de una cola y en algunos casos quiero evitar la reversión de la transacción, escribiendo el mensaje en una nueva cola en lugar de la cola de carta muerta. Entonces, quiero reprocesar el mensaje después de 5 minutos y repetir el proceso en caso de error.
Ahora leo con un Jms Listener
@JmsListener(destination = "${QueueName}")
public void readMessages(TextMessage msg) { ...
Pero si el mensaje no se consume, me gustaría volver a escribirlo en la cola y esperar 5 minutos antes de leerlo de nuevo. ¿Cuál es la mejor manera de implementar una lectura cronometrada en este caso?
¡Gracias a todos de antemano!
ACTUALIZACIÓN
Con IBM MQ versión 8+ existe la función de retraso de entrega que resuelve mi problema. ¡Saludos!
davy.ai
Como experto en TI especializado en Java, IBM MQ y Spring-JMS, sugiero la siguiente solución:
Puedes usar ScheduledExecutorService para implementar una lectura programada de un IBM MQ. Primero, configura el factor de contenedor del escuchante para que use un SimpleMessageListenerContainer con una concurrencia de 1, de manera que solo se lea un mensaje por vez. Luego, en el método readMessages, si el mensaje no ha sido consumido, envíalo a una cola nueva usando JmsTemplate, con un retraso de entrega de 5 minutos. Finalmente, programa una tarea usando ScheduledExecutorService para leer mensajes de la nueva cola después de 5 minutos y repetir el proceso en caso de error.
Aquí hay un ejemplo de implementación:
¡Espero que esto ayude! Avísame si tienes alguna otra pregunta.