代码之家  ›  专栏  ›  技术社区  ›  Jeremy

ActiveMQ使用者执行延迟

  •  0
  • Jeremy  · 技术社区  · 14 年前

    我看到了一个问题,队列没有备份,但是消费者实际执行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 回复  |  直到 13 年前
        1
  •  0
  •   SimonJ    14 年前

    您对消费者是否立即将消息从队列中拉出有多大把握?ActiveMQ提供 JMSActiveMQBrokerInTime JMSActiveMQBrokerOutTime 可用于确认的属性(请参见 ActiveMQ message properties ).

        2
  •  0
  •   Jeremy    13 年前

    事实证明,ActiveMQ运行良好,我的工作人员花费了太长时间来备份队列。我问题中的代码让我看到了这一点。