2011-10-10 26 views
8

Javaを使用してActiveMQのキュー長(キューに送信された未使用メッセージ数)を取得する方法は?ActiveMQのキュー長を取得する簡単な方法はありますか?

+0

キューインターフェイスではこのような情報が提供されないため、JMXを使用する必要があります。参照:[ActiveMQ JMX](http://activemq.apache.org/jmx.html)、[必須MBean](http://activemq.apache.org/jmx-support.html)例:[JMXでActiveMQを管理する] API](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

NBでした。maxPageSizeとmemoryLimitを増やさない限り、最大400メッセージしかブラウズしません。http://betterlogic.com/roger/2012/06/activemq-browse-all-messages – rogerdpack

+4

消費者のすべてのブローカーメッセージは単純にそれを数えますか? – deFreitas

関連する問題