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 指定的;然而,它通常存在于特定于實現的庫中。
添加回答
舉報