ActiveMQ消费者执行延迟

时间:2010-11-19 16:16:32

标签: java jboss activemq message-driven-bean

我发现没有备份队列的问题,但是消费者实际执行JMS消息的时间是从创建起100到200秒之间(通过JMSTimestamp-CurrentTime测量)。

队列中的流量相当低,每分钟少于30条消息。我能够通过重新启动ActiveMQ来解决问题,之后在创建消息的时间不到1毫秒就开始了消息。

我正在使用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);
        }

2 个答案:

答案 0 :(得分:0)

消费者如何立即将消息从队列中拉出来? ActiveMQ提供了可用于确认此情况的JMSActiveMQBrokerInTimeJMSActiveMQBrokerOutTime属性(请参阅ActiveMQ message properties)。

答案 1 :(得分:0)

事实证明,ActiveMQ表现得很好,我的工作人员花了太长时间,因此备份了队列。我的问题中的代码让我看到了。