2016-09-22 5 views
-1

Я использую веб-сферу версии 7.5, для чего требуется системный брокер для запуска службы MQ. Как я могу запустить службу MQ, когда я получаю доступ через Java-код. В настоящее время я получаю следующие исключения, когда доступ через кодКак начать работу с Websphere Mq Service?

MQJE001: Произошла MQException: Код завершения 2, Reason 2009 MQJE016: менеджер очереди MQ немедленно закрыт канал во время подключения причины Закрытия = 2009

MQJE001: MQException произошел: Код завершения 2, Reason 2009 MQJE016: менеджер очереди MQ немедленно закрыт канал во время подключения причины Закрытия = 2009

com.ibm.mq.MQException: MQJE001: MQException произошло: Код завершения 2, Reason 2009

MQJE016: менеджер очереди MQ немедленно закрыт канал во время подключения причины Закрытия = 2009

кода я использовал приведен ниже

public class Demo { 
      private MQQueueManager _queueManager = null; 
      public int port = 1422; 
      public String hostname = "192.168.1.5";//IP OF HOST 
      public String channel = "QM_ORANGE.QM_APPLE";//channel name 
      public String qManager = "QM_ORANGE";//queue manager name 
      public String inputQName = "Q1";//remote q type 
      public String outputQName = "QM_APPLE";//queue manager 

      public Demo() { 
       super(); 
      } 

      private void init(String[] args) throws IllegalArgumentException { 
       // Set up MQ environment 
       MQEnvironment.hostname = hostname; 
       MQEnvironment.channel = channel; 
       MQEnvironment.port = port; 
      } 

      public static void main(String[] args) { 

       Demo readQ = new Demo(); 

       try { 
        readQ.init(args); 
        readQ.selectQMgr(); 
        readQ.read(); 
        readQ.write(); 
       } catch (IllegalArgumentException e) { 
        System.out 
          .println("Usage: java MQRead <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>"); 
        System.exit(1); 
       } catch (MQException e) { 
        System.out.println(e); 
        System.exit(1); 
       } 
      } 

      private void read() throws MQException { 
       int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING 
         + MQC.MQOO_INPUT_SHARED; 

       MQQueue queue = _queueManager.accessQueue(inputQName, openOptions, 
         null, // default q manager 
         null, // no dynamic q name 
         null); // no alternate user id 

       System.out.println("MQRead v1.0 connected.\n"); 

       int depth = queue.getCurrentDepth(); 
       System.out.println("Current depth: " + depth + "\n"); 
       if (depth == 0) { 
        return; 
       } 

       MQGetMessageOptions getOptions = new MQGetMessageOptions(); 
       getOptions.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING 
         + MQC.MQGMO_CONVERT; 
       while (true) { 
        MQMessage message = new MQMessage(); 
        try { 
         queue.get(message, getOptions); 
         byte[] b = new byte[message.getMessageLength()]; 
         message.readFully(b); 
         System.out.println(new String(b)); 
         message.clearMessage(); 
        } catch (IOException e) { 
         System.out.println("IOException during GET: " + e.getMessage()); 
         break; 
        } catch (MQException e) { 
         if (e.completionCode == 2 
           && e.reasonCode == MQException.MQRC_NO_MSG_AVAILABLE) { 
          if (depth > 0) { 
           System.out.println("All messages read."); 
          } 
         } else { 
          System.out.println("GET Exception: "+e); 
         } 
         break; 
        } 
       } 
       queue.close(); 
       _queueManager.disconnect(); 
      } 

      private void selectQMgr() throws MQException { 
       _queueManager = new MQQueueManager(qManager); 
      } 

      private void write() throws MQException { 
       int lineNum = 0; 
       int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING; 
       try { 
        MQQueue queue = _queueManager.accessQueue(outputQName, openOptions, 
          null, // default q manager 
          null, // no dynamic q name 
          null); // no alternate user id 

        DataInputStream input = new DataInputStream(System.in); 

        System.out.println("MQWrite v1.0 connected"); 
        System.out.println("and ready for input, terminate with ^Z\n\n"); 

        // Define a simple MQ message, and write some text in UTF format.. 
        MQMessage sendmsg = new MQMessage(); 
        sendmsg.format = MQC.MQFMT_STRING; 
        sendmsg.feedback = MQC.MQFB_NONE; 
        sendmsg.messageType = MQC.MQMT_DATAGRAM; 
        sendmsg.replyToQueueName = "ROGER.QUEUE"; 
        sendmsg.replyToQueueManagerName = qManager; 

        MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the 
                      // defaults, 
                      // same 
        // as MQPMO_DEFAULT constant 

        String line = "test message"; 
        sendmsg.clearMessage(); 
        sendmsg.messageId = MQC.MQMI_NONE; 
        sendmsg.correlationId = MQC.MQCI_NONE; 
        sendmsg.writeString(line); 

        // put the message on the queue 

        queue.put(sendmsg, pmo); 
        System.out.println(++lineNum + ": " + line); 

        queue.close(); 
        _queueManager.disconnect(); 

       } catch (com.ibm.mq.MQException mqex) { 
        System.out.println(mqex); 
       } catch (java.io.IOException ioex) { 
        System.out.println("An MQ IO error occurred : " + ioex); 
       } 

      } 
     } 

я получил следующий журнал ошибок 9/24/2016 14: 9:24 - Процесс (1956,7) Пользователь (MUSR_MQADMIN) Программа (amqrmppa.exe) Host (Аби-PC) Установка (установки1) VRMF (7.5.0.2) QMGR (QM_ORANGE)

AMQ9208: E rror на прием от хоста Aneesh (192.168.0.7).

ОБЪЯСНЕНИЕ: Ошибка при получении данных от Aneesh (192.168.0.7) по TCP/IP. Этот может быть вызван сбоем связи. ACTION: Код возврата из вызова recv() TCP/IP был равен 10054 (X'2746 '). Запишите эти значения и сообщите системному администратору.

+0

вы смотрели на некоторые из предложений [здесь] У (http://www-01.ibm.com/support/docview.wss?uid=swg21226703)? –

+0

Должен ли я запускать любые ** услуги ** для доступа к MQ через Java.if да, тогда как я могу запустить службу. Я начал только диспетчер очереди с помощью команды ** runmqsc **. –

ответ

2

Ваша заявка на вызов _queueManager.disconnect() в read метод. Это закрывает соединение с менеджером очереди. Затем ваше приложение вызывает метод accessQueue, используя тот же отключенный объект _queueManager. Это приведет к ошибке подключения.

Предлагаем вам удалить queueManager.disconnect() с read, а затем попробуйте.

UPDATE

Пара предложений:

1) Установите тип транспорта для клиента, добавив следующую строку MQEnvironment.properties.put(MQConstants.TRANSPORT_PROPERTY,CMQC.TRANSPORT_MQSERIES_CLIENT)

2) обеспечивает канал, QM_ORANGE.QM_APPLE вы используете это Канал соединения с сервером (SVRCONN).

Этот вопрос может быть полезен: MQ queue manager closed channel immediately during connect

+0

Прокомментировал 'queueManager.disconnect() ', но при этом не используется все тот же Исключение –

+0

расскажите нам, в какой момент вы получаете исключение? – Shashi

+0

У меня есть исключение во время вызова 'readQ.selectQMgr(); ' ' private void selectQMgr() throws MQException { _queueManager = новый MQQueueManager (qManager); } ' –