2016-09-22 145 views
-1

我正在使用Web球体版本7.5,是否需要系统代理启动MQ服务。当我通过Java代码访问时,如何启动MQ服务。目前,我得到以下例外通过代码如何启动Websphere Mq服务?

MQJE001访问时:一个的MQException发生:完成码2,原因是2009年 MQJE016:MQ队列管理器在连接过程中 关闭原因立即关闭通道= 2009

MQJE001:一个的MQException发生:完成码2,原因2009 MQJE016:MQ队列管理器在连接过程中 封闭原因立即关闭通道= 2009

com.ibm.mq.MQException:MQJE001:一个的MQException发生:完成码2,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); 
       } 

      } 
     } 

给出我得到下面的错误日志 2016年9月24日14: 09:24 - 过程(1956.7)用户(MUSR_MQADMIN)计划(amqrmppa.exe) 主机(ABHI-PC)安装(Installation1) VRMF(7.5.0.2)QMGR(QM_ORANGE)

AMQ9208:电子从主机Aneesh(192.168.0.7)收到反馈。

说明: 通过TCP/IP从Aneesh(192.168.0.7)接收数据时发生错误。此 可能是由于通信故障。 操作: 来自TCP/IP recv()调用的返回码是10054(X'2746')。记录这些值,并告诉系统管理员。

+0

你看一些建议[这里](http://www-01.ibm.com/support/docview.wss?uid=swg21226703)? –

+0

我是否必须启动任何**服务**以通过Java访问MQ。如果是,那么我该如何启动服务。我已经使用** runmqsc **命令启动了只有队列管理器。 –

回答

2

您的应用程序在read方法中调用_queueManager.disconnect()。这会关闭与队列管理器的连接。然后你的应用程序使用同一个断开的_queueManager对象调用accessQueue方法。这会因连接错误而失败。建议您从read删除queueManager.disconnect()然后再尝试。

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。断开连接()'但没有用仍然得到相同的异常 –

+0

告诉我们在哪一点你会得到异常? – Shashi

+0

我在通话过程中遇到异常 'readQ.selectQMgr(); ' '私人无效selectQMgr()抛出的MQException { _queueManager =新MQQueueManager(qManager); }' –