2011-10-10 571 views
8

如何使用Java在ActiveMQ中獲取隊列長度(發送到隊列的未使用消息的數量)?獲取ActiveMQ隊列長度的簡單方法是什麼?

+0

您必須使用JMX,因爲Queue接口不提供此類信息。參考:[ActiveMQ JMX](http://activemq.apache.org/jmx.html),[必需的MBeans](http://activemq.apache.org/jmx-support.html)示例:[使用JMX管理ActiveMQ APIs](http://www.consulting-notes.com/2010/08/monitoring-and-managing-activemq-with.html) – Dag

回答

9

您必須使用JMX,因爲隊列接口不提供此類信息。

檢索特定隊列的大小的實施例

// 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 JMXRequired MBeans

實施例:managing ActiveMQ with JMX APIs

+0

感謝提示,但我使用了下一個ObjectName:「org.apache.activemq:BrokerName = localhost,Type = Queue,Destination = queueName「和QueueViewMBean類來獲取queueViewMBean。一般 - 方法是一樣的 –

5

篩選;

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

注意,除非你增加maxPageSize和memoryLimit它將只瀏覽你最多400條消息:http://betterlogic.com/roger/2012/06/activemq-browse-all-messages – rogerdpack

+4

你會讀消費者的所有經紀人消息只是簡單地計算它,真的? – deFreitas

相關問題