我看到一个问题,其中队列没有备份,但是消费者实际执行JMS消息的时间在创建后100到200秒之间(通过JMSTimestamp-CurrentTime测量)。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 2010-11-19 17:13:08
是的,我是,看到更新的问题 – Jeremy 2010-11-19 19:08:25