2012-11-28 11 views
7

Jaki jest najlepszy sposób przejrzenia kolejki JMS i pobrania wszystkich wiadomości?Liczba komunikatów w kolejce JMS

Jak policzyć liczbę wiadomości w kolejce?

Dzięki.

+1

Można użyć JMX w niektórych przypadkach (w zależności od implementacji JMS) – user1516873

+0

widzę, 'ActiveMQ 'tag. Przykład dla ActiveMQ http://java.dzone.com/articles/managing-activemq-jmx-apis – user1516873

Odpowiedz

6

ten sposób można liczyć Brak komunikatów w kolejce

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

Tak naprawdę uruchomiłem ten przykład iz jakiegoś powodu licznik wiadomości pokazuje 400, gdy mam 5000 wiadomości w kolejce –

+0

jak to powiedzieć? masz 5000 wiadomości w kolejce. – sunleo

+0

Widzę to fizycznie na mojej konsoli ActiveMQ –

5

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