2015-02-05 60 views
0

我试图创建一个应用程序,它继续检查启动并在activemq中运行的队列数。 和任何方式来检查队列是否正在工作,即如果损坏,无法处理消息。 请建议如何去做。如何计算ACTIVEMQ中的队列数

在此先感谢。

回答

1

您可以尝试下面的代码。

public static void main(String[] args) throws Exception 
    { 
     // get the initial context 
     InitialContext ctx = new InitialContext(); 

     // lookup the queue object 
     Queue queue = (Queue) ctx.lookup("queue/queue0"); 

     // lookup the queue connection factory 
     QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx. 
      lookup("queue/connectionFactory"); 

     // create a queue connection 
     QueueConnection queueConn = connFactory.createQueueConnection(); 

     // create a queue session 
     QueueSession queueSession = queueConn.createQueueSession(false, 
      Session.AUTO_ACKNOWLEDGE); 

     // create a queue browser 
     QueueBrowser queueBrowser = queueSession.createBrowser(queue); 

     // start the connection 
     queueConn.start(); 

     // browse the messages 
     Enumeration e = queueBrowser.getEnumeration(); 
     int numMsgs = 0; 

     // count number of messages 
     while (e.hasMoreElements()) { 
      Message message = (Message) e.nextElement(); 
      numMsgs++; 
     } 

     System.out.println(queue + " has " + numMsgs + " messages"); 

     // close the queue connection 
     queueConn.close(); 
    } 
+0

请注意,消息浏览器并不总是在队列中提供所有消息。默认情况下,ActiveMQ具有400条消息的浏览限制。所以这个答案不能区分400到100 000个消息。此外,它对于大消息来说非常慢,因为它要求你下载它们全部来计算它们。 –

0

看看咨询消息。您需要在您的配置中启用它们,但通过简单的JMS消息传递,您可以获得有关当前activemq实例信息的很多有用信息。 http://activemq.apache.org/advisory-message.html我正在使用它们来突出缓慢的生产者和消费者情况。

1

您可以使用代理和普通JMS API上的statistics plugin来请求统计信息。即要计算FOO.BAR上的消息数,请向ActiveMQ.Statistics.Destination.TEST.FOO发送空消息并指定replyTo标头。在类型为MapMessage的响应消息中,您可以找到消息计数器。

另一种方法是使用简单队列浏览器(类似于praveen_programmer建议的方式)仅浏览队列的第一条消息并检查该消息的时间戳。如果它超过某个阈值,那么您可能会遇到该消费者的问题。即没有消息在最后一小时/分钟/天处理过。

另一种方法是使用JMX,或者优选使用jolokia REST/HTTP management api

使用http只需查询目标,你会得到一个队列深度回: 要查询本地主机上的队列“Q”,使用下面的API(你需要为Web控制台提供的用户名/密码): http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=q