2012-01-05 2 views
3

Я пытаюсь контролировать очередь без использования каких-либо API, таких как Hermes или GEMS, т. Е. Я хочу использовать только JAVA. Поэтому для того, чтобы просмотреть проверку очереди, т.е. если сообщение достигло очереди или нет без потребляя сообщение я написал ниже фрагмент кода:Контрольная очередь с использованием 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++; 
     } 

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

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

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

+0

который используется поставщиком jms? – Scorpion

+0

@Scorpion Я использую сервер обмена сообщениями Tibco Enterprise – Kapil

ответ

0

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

0

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

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

+0

Я не могу отключить приемник, поскольку внешняя система, которая не входит в мои полномочия, прослушивает это. если я это сделаю, то в чем смысл мониторинга. – Kapil

1

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

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

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

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

+0

Это то, что я пытаюсь достичь. У нас есть процесс, который отправляет сообщения в очередь JMS после выполнения некоторых операций. Существует еще одна система, которая фактически потребляет сообщения. Поэтому нам нужно убедиться, что наш процесс работает нормально. Я знаю, что у нас есть инструмент мониторинга, такой как GEMS или Hermes, но нам нужно автоматизировать процесс, поэтому я планировал получить счет из очереди и записать его в файл. Пожалуйста, предложите любой другой вариант. – Kapil

+0

Я бы, вероятно, попросил ваш процесс сохранить некоторые внутренние счетчики и разоблачить их как MBean. Ваш монитор может запросить MBean и сбросить значения каждые 1 мин или около того. Это дает вам транзакции в минуту. Также любой коммерческий инструмент мониторинга подключается к MBeans. –

+0

@Vivek Вы можете расширить свой вариант использования? Какая сторона должна проверить доставку? Производственная система? Потребляющая система? Или совершенно другая система мониторинга? – stoft

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