Red de conocimiento informático - Conocimientos de programación - El cambio en la hora del sistema provocó el problema de que el consumidor ActiveMQ estuviera muerto.

El cambio en la hora del sistema provocó el problema de que el consumidor ActiveMQ estuviera muerto.

Dado que algunos servidores del entorno restablecen la hora del sistema periódicamente todos los días, las conexiones ActiveMQ a menudo experimentan conexiones inactivas. El fenómeno es que el agente ya no genera registros y el hilo está atascado en la declaración consumer.receive(60000) según los registros existentes. Hoy decidí estudiar el código fuente.

Información relacionada:/artículo/detalles? id=53501723

Cuando el agente llama al método consumer.receive(60000), hay una capa de operaciones dentro de MQ (método activemqmessageconsumer.dequeue).

Cuando la hora del sistema cambia (se ajusta hacia adelante), la hora utilizada por el sistema. currentTimeMillis disminuirá y el tiempo de espera en la última línea aumentará, lo que provocará que aumente el tiempo de espera y en los mensajes no reconocidos. Cola (tiempo de espera); método, se llamará el siguiente comando.

Mutex.wait(timeout) es un valor amplificado por la capa superior, lo que hace que el hilo muera y deje de recibir mensajes hasta que la hora del sistema vuelva a (tiempo antes del cambio + 60 s).

La solución no es usar timeout > 0 en consumer.receive(timeout), sino encapsularlo usted mismo, llame a consumer.receive(0) cada vez y luego agregue una capa de lógica para determinar el hora del sistema.

Otra solución es ir al sitio web oficial para detectar un error. . . . . Está bien, hagámoslo mañana. .