如何在ActiveMQ Artemis中获取队列长度?

问题描述 投票:0回答:1

我有一个代码可以获取队列长度,但是是在浏览方法上。如何通过 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 来获取队列长度

java jms activemq-artemis
1个回答
0
投票

JMS API 并没有真正提供获取队列长度的方法,因为它不是消费者应该真正关心的事情。正如您所提到的,您可以使用

QueueBrowser
获得队列长度的近似值,但无法使用任何其他 JMS API 调用来实现此目的。

如果您确实想知道队列的长度,那么您可以使用 ActiveMQ Artemis 的管理 API。代理附带了一些不同的示例,演示了如何以不同的方式使用管理 API。

© www.soinside.com 2019 - 2024. All rights reserved.