【发布时间】:2012-11-20 16:33:10
【问题描述】:
我正在使用 Active MQ 和 Java JMS。
我要统计队列中的消息数。
一种方法是使用浏览器计算消息数:
Queue queue = (Queue) session.createQueue(subject);
QueueBrowser queueBrowser = session.createBrowser(queue);
Enumeration<?> e = queueBrowser.getEnumeration();
int numMsgs = 0;
// count number of messages
while (e.hasMoreElements()) {
// Message m = (Message) e.nextElement();
e.nextElement();
numMsgs++;
}
但是对于一个有 5000 个待处理请求的队列,这只返回 500 个。
另一种方法是这样(迭代队列中的所有消息):
Message message= consumer.receive(500);
while(message!= null)
{
if (message instanceof TextMessage)
{
TextMessage textMessage = (TextMessage) message;
// BytesMessage Byte
System.out.println("Received message '"+ textMessage.getText() + "'");
}
if(message!=null)
Messages_list.add(message);
message = consumer.receive(1);
}
但这也没有给出正确数量的待处理消息。
如何自信地迭代 akk 队列中等待的消息?
【问题讨论】:
-
非常奇怪的行为,我一直对 QueueBrowser 有很好的体验。愚蠢的问题,但仍然 - 你确定你正在寻找正确的队列吗?您是如何确定有 5000 条消息的?例如,Glassfish 附带的
Imqadmin通常没有关于 nr 消息的最新信息。
标签: java jms activemq message-queue