繁体   English   中英

ActiveMQ使用者执行延迟

[英]ActiveMQ consumer execution delay

我看到一个问题,其中不备份队列,但是消费者从创建到实际执行JMS消息的时间在100到200秒之间(通过JMSTimestamp-CurrentTime测量)。

队列中的流量非常低,每分钟少于30条消息。 我可以通过重新启动ActiveMQ来解决此问题,此后从创建消息之日起不到1ms的时间内启动消息。

我正在使用ActiveMQ 5.4.1,在MDB中完成工作的正常总执行时间不到2毫秒。 在延迟时,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);
        }

您如何确定使用者立即将消息从队列中拉出? ActiveMQ提供了JMSActiveMQBrokerInTimeJMSActiveMQBrokerOutTime属性,可以用来确认这一点(请参阅ActiveMQ消息属性 )。

事实证明,ActiveMQ的表现还不错,我的工作人员花了太长时间,因此备份了队列。 我问题中的代码使我看到了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM