Лучший способ создать соединение IBM MQ на том же сервере

#java #ibm-mq

#java #ibm-mq

Вопрос:

Подключение к IBM MQ с использованием Java, но и приложение, и MQ находятся на одном сервере. В этом случае мне нужно указать хост, порт, канал и т.д., Или подойдет только диспетчер очередей, или любой другой подход получше.

Я знаю, как подключиться, используя имя хоста, порта, канала и очереди.

Каков наилучший подход к подключению, когда и приложение, и диспетчер очередей находятся на одном сервере.

Ответ №1:

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

Для клиентского соединения подключение к диспетчеру очередей осуществляется через сокет TCP / IP.

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

В зависимости от того, какой интерфейс MQ Java вы используете, взгляните на следующие примеры.

Классы IBM MQ для Java

Посмотрите на пример MQSample.java что обеспечивает очень простое подключение с локальными привязками.

Класс IBM MQ для JMS

Посмотрите на образец JmsBrowser в качестве примера. Он может использовать либо клиентские, либо локальные привязки conncetions. Посмотрите на логическое значение clientTransport и следуйте соответствующему коду.

Комментарии:

1. Нужно ли настраивать локальные очереди или любую другую конфигурацию при подключении через режим привязки?

2. Для режима локальных привязок требуется гораздо меньше настроек, чем для режима клиентского подключения. Для клиентского соединения потребуется работающий прослушиватель TCP / IP, канал SVRCONN и некоторые правила безопасности, связанные с каналом, а также полномочия на использование очереди. Локальное соединение с привязками потребует полномочий только для использования очереди.

Ответ №2:

Если вас не волнует JMS, вы можете сделать это следующим образом (опуская обработку ошибок):

   MQQueueManager qMgr = new MQQueueManager("");
  int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF;
  MQQueue queue = qMgr.accessQueue("Q1", openOptions);

  MQMessage mqMsg = new MQMessage();
  queue.get(mqMsg);
  System.err.println("received: "   mqMsg.readLine() );

  queue.close();
  qMgr.disconnect(); 
  

Комментарии:

1. Этот код будет подключаться к менеджеру очередей по умолчанию. Если у вас нет менеджера очередей по умолчанию или если вы хотите использовать другой менеджер очередей не по умолчанию, вы должны указать имя менеджера очередей в MQQueueManager .

2. согласен, если вы не настроили QMgr по умолчанию, используйте: new MQQueueManager(qmgrName)

3. Теперь я получаю приведенную ниже ошибку java.lang. Ошибка NoClassDefFoundError: com.ibm.mq.MQQueueManager (ошибка инициализации). Я добавил следующие jar: javax.jms-api, com.ibm.mq.allclient, com.ibm.mq.jmqi, com.ibm.mqjms. Я что-то пропустил?

4. у вас должно быть java/lib/com.ibm.mq.jar в вашем classpath