2011-02-02 2 views
6

Я использую Hornetq 2.0, я не понимаю, как я могу узнать, сколько сообщений сидит в очереди на данный момент.Как найти horneq Длина очереди

Это очень полезная функция, поэтому я могу знать во время выполнения, если потребитель потребляет достаточно быстро.

Я не использую JMS api, но очень оптимизированный API ядра.

Каков правильный (самый быстрый) способ получить номер сообщения в очереди?

Я нашел 2 пути, но не знаю, как правильно это сделать.

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; 

} 

или

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; 

} 

ответ

6

Я нашел эти 2 способами

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

и

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 суда с примером на счетчиках сообщений. Он расположен по адресу hornetq-2.2.14.Final/examples/jms/message-counters

Смежные вопросы