获取ActiveMQ的队列长度的任何简单方法?

如何使用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(); 

参考: ActiveMQ JMX , 必需的MBean

示例: 使用JMX API管理ActiveMQ

像这样;

 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());