Как найти длину очереди Horneq - PullRequest
6 голосов
/ 02 февраля 2011

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

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

Я не использую API-интерфейс JMS, а высокооптимизированный 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;

}

Ответы [ 3 ]

7 голосов
/ 11 февраля 2011

Я нашел эти 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;
}
2 голосов
/ 09 февраля 2011

Вы должны использовать интерфейс управления, в конце этого документа приведен пример получения количества сообщений: http://hornetq.sourceforge.net/docs/hornetq-2.0.0.GA/user-manual/en/html/management.html#management.message-counters

1 голос
/ 13 ноября 2012

hornetq-2.2.14. Наконец, поставляется с примером на счетчиках сообщений.Он находится по адресу hornetq-2.2.14.Final/examples/jms/message-counters

...