Реализация IBM MQ Listener с использованием кода WMQ (не JMS) - PullRequest
0 голосов
/ 06 января 2020

Мне сложно понять, как реализовать IBM MQ Listener (при событии сообщения) с использованием jar / кода WMQ. Я видел реализацию JMS, где у нас есть метод OnMessage, который выполняется всякий раз, когда в очередь поступает сообщение. Я ищу подобную опцию, используя баночки WMQ. Я изучаю класс MQGetMessageOptions и параметры MQ C, но пока не повезло. Любая помощь будет оценена.

Я использую com.ibm.mq-6.0.2.1.jar файл jar.

1 Ответ

2 голосов
/ 06 января 2020

Сводка :

Классы IBM MQ для JMS реализуют функции асинхронного прослушивателя сообщений (onMessage), используя базовые функции обратного вызова IBM MQ, начиная с IBM MQ v7.0.

Классы IBM MQ для Java вообще не поддерживают функции асинхронного прослушивателя сообщений (обратный вызов).


Фон

Функцию обратного вызова добавили в IBM MQ в версии 7.0, но IBM не реализовала эту функцию в классах IBM MQ для Java.

Обратите внимание, что на странице центра знаний v9.0 " Использование классов IBM MQ для Java ", классы IBM MQ для Java функционально стабилизированы на уровне, поставляемом в IBM MQ версии 8.0. Поскольку классы IBM MQ для Java не имели этой функции с IBM MQ v8.0, IBM не будет добавлять ее, пока они не изменят направление.

Следующим шагом после стабилизации функции IBM является устаревание особенность Не рекомендуется разрабатывать новые приложения с классами IBM MQ для Java, лучше для go с классами IBM MQ для JMS.


Альтернатива

Если вам действительно нужно использовать классы IBM MQ для Java, вам потребуется опросить очередь на предмет поиска сообщений вместо регистрации обратного вызова в MQ. Обратите внимание, что поскольку обратный вызов не существовал до MQ v7.0, классы IBM MQ для асинхронного прослушивателя сообщений JMS в MQ v6.0 и ниже были реализованы путем опроса очереди в фоновом режиме. IBM всегда поддерживала GET с ожиданием. Чтобы выполнить простое l oop, которое получает с ожиданием X времени, нужно будет обращаться к администратору очередей только так часто, как время ожидания истекло или новое сообщение попадает в очередь.

Если вы выполняете GET без ожидания, а затем сразу же делаете еще один GET без ожидания, тогда это будет и дорого, и не рекомендуется.

Приятная вещь о классах IBM MQ для асинхронного сообщения JMS Слушатель в том, что IBM позаботилась о тяжелой работе, вам нужно только написать код для обработки сообщения, а не logi c для получения сообщения. Использование классов IBM MQ для асинхронного прослушивателя сообщений JMS, на мой взгляд, все же лучше, чем правильно написанное приложение для опроса, потому что, если ничего другого, вы не изобретаете колесо.


Другие API

Конечно, есть и другие, не Java API, которые поддерживают обратный вызов.

  • В C# он имеет аналогичную ситуацию, исходный MQ. NET API (amqmdnet.dll) не поддерживает обратный вызов, но более новый API XMS. NET (JMS-подобная реализация в. NET) поддерживает обратный вызов.
  • Обычный API C поддерживает обратный вызов, но C ++ нет. Все, что использует библиотеки API C, может технически поддерживать обратный вызов, если они предоставляют эту функциональность, но некоторые вещи этого не делают, например, pymqi основан на библиотеках API C, но не поддерживает обратный вызов.
...