2011-10-10 3 views
8

Java를 사용하여 ActiveMQ의 대기열 길이 (대기열로 보내지는 사용되지 않은 메시지 수)를 얻는 방법은 무엇입니까?ActiveMQ의 대기열 길이를 얻는 간단한 방법은 무엇입니까?

+0

대기열 인터페이스는 이러한 정보를 제공하지 않으므로 JMX를 사용해야합니다. 참조 : [ActiveMQ JMX] (http://activemq.apache.org/jmx.html), [필수 MBeans] (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 JMX, Required 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

관련 문제