我正在使用Active MQ和Java JMS。在JMS队列上计算消息时出现奇怪行为
我想统计队列中消息的数量。
一种方法是计数messeages使用浏览器:
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
另一种做法是这样的(重复的所有messeages队列):
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);
}
但是,这也不会给出适量的消息挂起。
我该如何自信地迭代队列中等待的消息?
非常奇怪的行为,我一直有与QueueBrowser很好的经验。愚蠢的问题,但仍然 - 你确定你正在寻找正确的队列?你是如何确定有5000条消息的?例如,Glassfish附带的“Imqadmin”通常没有关于消息的最新信息。 –