2011-02-02 13 views
6

Sto usando Hornetq 2.0 Non capisco come posso sapere quanti messaggi sono seduti in coda al momento.Come trovare un horneq Lunghezza della coda

Questa è una funzionalità molto utile, quindi posso sapere in fase di esecuzione se il mio consumatore consuma un messaggio abbastanza veloce.

Non sto utilizzando l'API di JMS ma l'API di base altamente ottimizzata.

Qual è il modo corretto (più veloce) per ottenere il numero di messaggi nella coda?

Ho trovato 2 vie ma non so quale sia il modo corretto di farlo.

public int size(){ 

    ClientSession session; 

    try { 

     session = sf.createSession(false, false, false); 

     ClientRequestor requestor = new ClientRequestor(session, "hornetq.management"); 

     ClientMessage m = session.createMessage(false); 

     ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount"); 

     ClientMessage reply = requestor.request(m); 

     int count = (Integer) ManagementHelper.getResult(reply); 

     return count; 

    } catch (Exception e) { 

     e.printStackTrace(); 

    } 

    return 0; 

} 

o

public synchronized int size(){ 

    ClientSession coreSession = null; 

    int count = 0; 

    try { 

     coreSession = sf.createSession(false, false, false); 

     ClientSession.QueueQuery result; 

     result = coreSession.queueQuery(new SimpleString(queueName)); 

     count = result.getMessageCount(); 

    } catch (HornetQException e) { 

     e.printStackTrace(); 

    } finally { 

     if (coreSession!= null){ 

      try { 

       coreSession.close(); 

      } catch (HornetQException e) { 

       e.printStackTrace(); 

      } 

     } 

    } 

    return count; 

} 

risposta

6

ho trovato questi 2 modi

public synchronized int size(){ 
    ClientSession session; 
    try { 
     session = sf.createSession(false, false, false); 
     ClientRequestor requestor = new ClientRequestor(session, "hornetq.management"); 
     ClientMessage m = session.createMessage(false); 
     ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount"); 
     ClientMessage reply = requestor.request(m); 
     int count = (Integer) ManagementHelper.getResult(reply); 
     return count; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return 0; 
} 

e

public synchronized int size(){ 
    ClientSession coreSession = null; 
    int count = 0; 
    try { 
     coreSession = sf.createSession(false, false, false); 
     ClientSession.QueueQuery result; 
     result = coreSession.queueQuery(new SimpleString(queueName)); 
     count = result.getMessageCount(); 
    } catch (HornetQException e) { 
     e.printStackTrace(); 
    } finally { 
     if (coreSession!= null){ 
      try { 
       coreSession.close(); 
      } catch (HornetQException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return count; 
} 
1

hornetq-2.2.14.Le navi finali con un esempio sui contatori messaggio. Si trova all'indirizzo hornetq-2.2.14.Final/examples/jms/message-counters

Problemi correlati