Mic*_*l A 4 java activemq-classic jms message-queue
我正在使用Active MQ和Java 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++;
}
Run Code Online (Sandbox Code Playgroud)
但是对于具有5000个待处理请求的队列,这仅返回500.
另一种方法是这样(迭代队列中的所有messeage):
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);
}
Run Code Online (Sandbox Code Playgroud)
但是这也没有给出正确数量的消息.
我怎么能自信地迭代akk在队列中等待的消息?
ActiveMQ中存在一个错误,阻止浏览返回实际的消息数.在这种情况下,浏览仅返回单页消息,该页面由maxPageSize属性设置并在此处记录:http://activemq.apache.org/per-destination-policies.html
ActiveMQ目前有一个关于这个问题的错误报告,它在这里被跟踪:https://issues.apache.org/jira/browse/AMQ-4181.此问题已得到解决,目前计划在ActiveMQ 5.8.0中修复.
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |