Очередь мониторинга с использованием Java - PullRequest
3 голосов
/ 05 января 2012

Я пытаюсь отслеживать очередь без использования какого-либо API, такого как Hermes или GEMS, т.е. я хочу использовать исключительно JAVA. Таким образом, чтобы просмотреть очередь, то есть проверить, поступило ли сообщение в очередь или нет, фактически не потребляя сообщение, которое я написал ниже, фрагмент кода:

javax.jms.QueueBrowser browser = session.createBrowser(queue);

        Enumeration msgs = browser.getEnumeration();

        int Count=0;

        while(msgs.hasMoreElements())
        {
            message = (javax.jms.Message)msgs.nextElement();
            System.out.println("Message"+message);
            Count++;
        }

Однако, когда я публикую сообщения в очереди, результат не отображается. Я проверил, что сообщения поступают в очередь, и они используются получателем. Так как этот подход не работал, я подумал использовать другой подход, который заключается в подсчете количества сообщений о доставке, полученных очередью до и после. Поэтому я использовал приведенный ниже фрагмент кода

QueueInfo q= new QueueInfo(queueName);
    long l=q.getInTransitMessageCount();
    System.out.println("In transit Mesasge Count="+l+"\n");

Но это тоже не работает. Любые предложения или объяснения для решения этой проблемы будут высоко оценены. Обратите внимание, что в коде нет ошибки компиляции, и все необходимые классы импортированы.

Ответы [ 3 ]

1 голос
/ 09 января 2012

Код, который вы используете, будет подсчитывать количество сообщений в очереди в один момент времени. Сообщения, отправленные и использованные за пределами этого временного интервала, не будут отображаться, и сообщения потребляются очень быстро в большинстве реализаций JMS.

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

Если вы пытаетесь сосчитать проходящие мимо сообщения, вам нужно будет перехватить их (т.е. потреблять их самостоятельно и отправлять в другую очередь).

Возможно, вы захотите дать больше информации о том, что вы действительно хотите.

0 голосов
/ 06 января 2012

QueueBrowser не нужно давать вам снимок. Если у вас есть другие потребители в очереди, то они будут истощать ее, поэтому возможно, что их вытаскивают. Пожалуйста, попробуйте сначала отключить своего потребителя, чтобы увидеть, что происходит. Смотри [1]

[1] http://docs.oracle.com/javaee/1.3/api/javax/jms/QueueBrowser.html

0 голосов
/ 05 января 2012

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

...