【问题标题】:Any simple way to get the queue length of an ActiveMQ? [closed]任何简单的方法来获取 ActiveMQ 的队列长度? [关闭]
【发布时间】:2017-08-25 20:07:14
【问题描述】:

如何使用Java获取ActiveMQ中的队列长度(发送到队列的未消费消息的数量)?

【问题讨论】:

标签: java jms activemq


【解决方案1】:

您必须使用 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 JMXRequired MBeans

例如:managing ActiveMQ with JMX APIs

【讨论】:

  • 感谢提示,但我使用了下一个 ObjectName:“org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=queueName”和 QueueViewMBean 类来获取 queueViewMBean。一般来说 - 方法是相同的
【解决方案2】:

像这样;

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

【讨论】:

猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多