2011-02-02 25 views
6

Estoy usando Hornetq 2.0. No entiendo cómo puedo saber cuántos mensajes están pendientes en la cola en este momento.Cómo encontrar un horneq Longitud de cola

Esta es una característica muy útil, así que puedo saber en tiempo de ejecución si mi consumidor consume un mensaje lo suficientemente rápido.

No estoy usando la API de JMS pero la API de núcleo altamente optimizada.

¿Cuál es la forma correcta (más rápida) de obtener el número de mensajes en la cola?

Encontré 2 vías pero no sé cuál es la manera correcta de hacerlo.

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; 

} 

Respuesta

6

me encontré con esos 2 maneras

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; 
} 

y

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.Final incluye un ejemplo en los contadores de mensajes. Se encuentra en hornetq-2.2.14.Final/examples/jms/message-counters

Cuestiones relacionadas