Лучший способ проверить очередь IBM WebSphere MQ 7.0 на входящие сообщения

Я новичок в IBM WebSphere MQ и хотел бы спросить вас о наилучшем подходе к решению следующей задачи.

Я использую WebSphere MQ 7.0 и реализовал java-приложение для проверки очереди MQ на входящие сообщения.

Входящая очередь открывается с помощью следующего кода:

int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE;
MQQueue incomingQueue = 
          qManager.accessQueue(qName, openOptions, null, null, null);

Теперь задача в режиме реального времени проверять появление новых сообщений в incomingQueue и обрабатывать их.

Я постоянно проверяю глубину очереди с помощью вызова incomingQueue.getCurrentDepth() в цикле while и проверяю, больше ли она нуля, после чего получаю новые сообщения.

Это работает, но я считаю, что это не очень хороший подход.

Каков наилучший подход к уведомлению о появлении нового входящего сообщения в очереди MQ?

Спасибо.


person Community    schedule 15.11.2011    source источник


Ответы (2)


Просто вызовите метод queue.Get(msg). Это блокирующий вызов, и он будет возвращен только при наличии сообщения в очереди.

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

Есть хорошие образцы, которые поставляются с MQ. Вы можете найти их в (в Windows) \tools\jms\samples и tools\wmqjava\samples.

person Shashi    schedule 15.11.2011

Попробуйте использовать следующие открытые параметры для доступа к очереди

openOptions = MQConstants.MQOO_INQUIRE + MQConstants.MQOO_FAIL_IF_QUIESCING
                        + MQConstants.MQOO_INPUT_AS_Q_DEF + MQConstants.MQOO_READ_AHEAD;

И следующие варианты получения сообщений

MQGetMessageOptions getOptions = new MQGetMessageOptions();
            getOptions.options = MQConstants.MQGMO_WAIT + MQConstants.MQGMO_PROPERTIES_COMPATIBILITY
                    + MQConstants.MQGMO_ALL_SEGMENTS_AVAILABLE + MQConstants.MQGMO_COMPLETE_MSG
                    + MQConstants.MQGMO_ALL_MSGS_AVAILABLE;

Опция MQConstants.MQGMO_WAIT поможет нам читать сообщения, когда они поступают в очередь. Но убедитесь, что поток/программа Java должен постоянно запускать ваш класс, чтобы слушать очередь.

person prodeveloper    schedule 11.02.2020