我有一个代码可以获取队列长度,但是是在浏览方法上。如何通过 JMS 获取队列长度?如果不是通过 JMS,那么也许通过另一个包中的其他类?我正在使用 javax.jms 包中的类
QueueSession queueSession = null;
QueueConnectionFactory connectionFactory;
QueueConnection connection;
connectionFactory = new ActiveMQQueueConnectionFactory("tcp://" + urlBroker);
connection = connectionFactory.createQueueConnection(login, password);
queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSession queueSession = new QueueSession
QueueBrowser queueBrowser = new QueueBrowser();
Queue queue = (Queue) initialContext.lookup("dynamicQueues/" + queueName);
queueBrowser = queueSession.createBrowser(queue);
Enumeration<Message> messageEnumeration = queueBrowser.getEnumeration();
while (messageEnumeration.hasMoreElements()) {
messagesList.add(messageEnumeration.nextElement());
}
System.out.println(messagesList.size());
在这种情况下,不要读取消息,而只需使用 Consume 类将它们放入 arrayList 中。或者也许有一个单独的 get 方法用于 Consumer 来获取队列长度
JMS API 并没有真正提供获取队列长度的方法,因为它不是消费者应该真正关心的事情。正如您所提到的,您可以使用
QueueBrowser
获得队列长度的近似值,但无法使用任何其他 JMS API 调用来实现此目的。
如果您确实想知道队列的长度,那么您可以使用 ActiveMQ Artemis 的管理 API。代理附带了一些不同的示例,演示了如何以不同的方式使用管理 API。