2011-02-02 34 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; 
} 

and

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 ship with a message on-counters。它位於hornetq-2.2.14.Final/examples/jms/message-counters