1 回答

TA贡献1842条经验 获得超13个赞
队列深度可以通过浏览消息来统计。浏览不消耗消息。
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
Queue q = session.createQueue("exampe_queue");
QueueBrowser browser = session.createBrowser(q);
Enumeration enumeration = browser.getEnumeration();
long msgCounter = 0;
while (enumeration.hasMoreElements()) {
Message msg = (Message) enumeration.nextElement();
msgCounter += 1;
}
System.out.println("Queue depth: " + msgCounter);
然而,当客户端从代理中提取消息时,这种方法非常慢。如果您需要偶尔检查队列深度以进行监控或类似目的,那么它会起作用。
更好的解决方案是使用 get-me-aq-depth 调用,但这不是 JMS api 指定的;然而,它通常存在于特定于实现的库中。
添加回答
举报