2012-11-28 185 views
7

通過JMS隊列並獲取所有消息的最佳方法是什麼?統計JMS隊列中的消息數

如何計算隊列中的消息數量?

謝謝。

+1

你可以在某些情況下使用JMX(取決於JMS實現的) – user1516873

+0

我明白了,'的ActiveMQ '標籤。 ActiveMQ的例子http://java.dzone.com/articles/managing-activemq-jmx-apis – user1516873

回答

6

這是你可以指望沒有消息的隊列中的

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

我實際上運行這個例子,由於某種原因,當我在隊列上有5000條消息時,消息數顯示爲400 –

+0

How do you say隊列中有5000條消息。 – sunleo

+0

我在我的ActiveMQ控制檯 –

5

使用JmsTemplate的

public int getMessageCount(String messageSelector) 
{ 
    return jmsTemplate.browseSelected(messageSelector, new BrowserCallback<Integer>() { 
     @Override 
     public Integer doInJms(Session s, QueueBrowser qb) throws JMSException 
     { 
      return Collections.list(qb.getEnumeration()).size(); 
     } 
    }); 
}