【发布时间】:2017-08-25 20:07:14
【问题描述】:
如何使用Java获取ActiveMQ中的队列长度(发送到队列的未消费消息的数量)?
【问题讨论】:
-
您必须使用 JMX,因为 Queue 接口不提供此类信息。参考:ActiveMQ JMX、Required MBeans 示例:managing ActiveMQ with JMX APIs
如何使用Java获取ActiveMQ中的队列长度(发送到队列的未消费消息的数量)?
【问题讨论】:
您必须使用 JMX,因为 Queue 接口不提供此类信息。
获取特定队列大小的示例:
// connection
String url = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(url));
MBeanServerConnection connection = connector.getMBeanServerConnection();
// get queue size
ObjectName nameConsumers = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=myqueue");
DestinationViewMBean mbView = MBeanServerInvocationHandler.newProxyInstance(connection, nameConsumers, DestinationViewMBean.class, true);
long queueSize = mbView.getQueueSize();
【讨论】:
像这样;
QueueBrowser browser = session.createBrowser(queue);
Enumeration enu = browser.getEnumeration();
List list = new ArrayList();
while (enu.hasMoreElements()) {
TextMessage message = (TextMessage) enu.nextElement();
list.add(message.getText());
}
System.out.println("Size " + list.size());
【讨论】: