Tenemos una aplicación java independiente que procesa algunos antecedentes en una máquina Debian. Los trabajos que tiene que manejar se envían a través de mensajes RabbitMQ.¿Cuál es la mejor manera de finalizar de forma segura una aplicación java con clientes RabbitMQ en ejecución?
Cuando la aplicación Java necesita ser actualizada, necesitamos detenerla (matarla). Pero debemos asegurarnos de que ningún consumidor esté procesando un mensaje. ¿Cuál es, en su experiencia, la mejor manera de lograr esto?
Hemos intentado enviar un mensaje 'SHUTDOWN' al consumidor, pero parece que no podemos cerrar la cola o el canal? ¡Congela la aplicación! ¿O existe otra solución en la que podríamos, por ejemplo, apagar automáticamente la aplicación sin ejecutar el comando kill en Linux?
Thx para compartir su experiencia.
Saludos
Puede utilizar mensajes durables y en ese caso se puede matar cuando cada vez que desee porque los mensajes que regresan o salen para ese asunto no se perderán. Ese acoplamiento flojo/com asincrónico es una de las muchas razones por las que las personas usan MQ. – Shahzeb
@Shahzeb Sí, utilizamos mensajes duraderos y para algunos de los trabajos simplemente podemos eliminarlos y al reiniciarlos vuelve a procesar los mensajes. Pero 1 trabajo en particular es hacer negocios con una API externa y no debe interrumpirse porque una vez en el proceso no es posible volver a ejecutarlo en la misma solicitud. –