대기열이 백업되지 않지만 실제로 컨슈머가 JMS 메시지를 실행하는 시간은 (JMSTimestamp-CurrentTime을 통해 측정 한 바와 같이) 생성 후 100 - 200 초 사이 인 문제가 나타납니다.ActiveMQ 소비자 실행 지연
흐름이 대기열에 비해 상당히 적습니다. 분당 30 메시지 미만입니다. ActiveMQ를 다시 시작하여 문제를 해결할 수있었습니다. 그 후 메시지는 생성 된 시점으로부터 1ms 이내에 시작되었습니다.
저는 ActiveMQ 5.4.1을 사용하고 있으며, MDB에서 수행되는 작업의 일반적인 총 실행 시간은 2ms 미만입니다. 지연 당시에는 ActiveMQ 로그에 오류 메시지가 없었고 CPU가 부족하여 많은 메모리가있었습니다.
소비자가 대기열에서 메시지를 당긴 것처럼 보이지만 웬일인지 그들 위에 앉아있는 것처럼 보입니다.
이 문제를 일으킬 수있는 구성 문제가 있습니까?
편집 :
다음과 같이 내 MDB의 첫 번째 줄은 다음과 같습니다
/* Check the time since this message was created versus processed */
try {
long secondsToProcess = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - aMessage.getJMSTimestamp());
if (secondsToProcess > 5) {
log.error("JMS Consumer Start Delay: " + secondsToProcess + " s" + " JMS Message took more then 5 seconds to be processed");
} else {
log.debug("JMS Consumer Start Delay: " + secondsToProcess + " s");
}
} catch (Exception e) {
log.error(e);
}
실제로 MDB 상단에 로그 문을 넣으려고 했습니까? 이것은 이상한 트랜잭션 버그처럼 보입니다. – javamonkey79
예, 업데이트 된 질문이 표시됩니다. – Jeremy