我看到其中一个队列没有备份然而的时间为消费者的问题实际执行JMS消息是100之间 - 从创建200秒(经由JMSTimestamp-currentTime的测量)。

流速为相当低到队列中,小于30周的消息一分钟。我可以通过重新启动ActiveMQ的,在这之后的消息,正在上启动小于从他们被造1毫秒来解决问题。

我使用的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);
        }
有帮助吗?

解决方案 2

事实证明,ActiveMQ的是表现得很好,我的工人太长时间服用,因此备份队列。在我的问题的代码让我看到了这一点。

其他提示

如何某些你的消费者立即拉断的消息队列?的ActiveMQ提供JMSActiveMQBrokerInTimeJMSActiveMQBrokerOutTime属性可用于证实这一点(见 ActiveMQ消息属性)。

scroll top