ActiveMQ的消费者实施延时
-
26-09-2019 - |
题
我看到其中一个队列没有备份然而的时间为消费者的问题实际执行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提供JMSActiveMQBrokerInTime
和JMSActiveMQBrokerOutTime
属性可用于证实这一点(见 ActiveMQ消息属性一>)。
不隶属于 StackOverflow