2014-12-21 5 views
0

Tomcat 7.05에 원격 MQ 관리자에 연결하는 응용 프로그램이 있습니다. 모든 것이 잘 작동합니다. 연결을 만드는 데는 약 13 초의 시간이 걸립니다. (한 컴퓨터에 Java 코드와 MQ 서버를 둘 다 넣으면, 그것은 1 초 미만 걸립니다). 연결 시간을 어떻게 향상시킬 수 있습니까?MQ 클라이언트가 연결 시간을 향상시키는 방법은 무엇입니까?

내 자바 코드 :

import javax.jms.DeliveryMode; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.Queue; 
import javax.jms.QueueConnection; 
import javax.jms.QueueConnectionFactory; 
import javax.jms.QueueReceiver; 
import javax.jms.QueueSender; 
import javax.jms.QueueSession; 
import javax.jms.Session; 
import javax.jms.TextMessage; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import com.ibm.mq.constants.MQConstants; 

     private MQldpResponse requestReply() { 

      String messageReceive = null; 
      MQldpResponse status = new MQldpResponse(); 

      status.setErrorCode(0); 
      status.setErrorDesc("Success"); 

      if (message == null) { 
        LDPLogger.warning("Message is null for request service " + service); 
      }  
      setMQVars();// Setting mq vars 
      QueueConnection queueConnection = null; 
      QueueSender queueSender = null; 
      QueueReceiver queueReceiver = null; 
      try { 
        Context context = (Context) new InitialContext().lookup("java:comp/env"); 
        QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context.lookup(qcf); 
        queueConnection = queueConnectionFactory.createQueueConnection();//This takes 13~ seconds!! 
        queueConnection.start(); 
        QueueSession session = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 

        Queue requestQueue = session.createQueue(requestQueueName); 
        queueSender = session.createSender(requestQueue); 
        TextMessage requestTextMessage = session.createTextMessage(message); 
        Queue replyQueue = session.createQueue(replyQueueName); 
        requestTextMessage.setJMSReplyTo(replyQueue); 
        requestTextMessage.setIntProperty("JMS_IBM_MsgType", MQConstants.MQMT_REQUEST); 
        queueSender.send(requestTextMessage, deliveryMode, Message.DEFAULT_PRIORITY, expiration); 
        String messageID = requestTextMessage.getJMSMessageID(); 
        if (Utils.isEmpty(messageID)) { 
         throw new Exception("invalid messageid"); 
        } 
        String selector = "JMSCorrelationID = '" + messageID + "'"; 
        queueReceiver = session.createReceiver(replyQueue, selector); 
        Message replyTextMessage = queueReceiver.receive(timeout); 
        if (replyTextMessage != null && replyTextMessage instanceof TextMessage) { 
         messageReceive = ((TextMessage) replyTextMessage).getText(); 
         status.setResponseXML(messageReceive); 
        } else { 
         throw new Exception("No Response for service " + service + "."); 
         } 
      } catch (Exception e) { 
        status.setErrorCode(MQldpResponse.ERROR_CODE_SYS_ERROR); 
        status.setErrorDesc(e.getMessage()); 
        LDPLogger.error(e.getMessage(), e); 
        if (e instanceof JMSException) { 
         Exception linkedException = ((JMSException) e).getLinkedException(); 
         if (linkedException != null) { 
           LDPLogger.error(linkedException.getMessage(), linkedException); 
           status.setErrorDesc(linkedException.getMessage()); 
         } 
        } 
      } 
      finally { 
        closeJMS(queueConnection, queueSender, queueReceiver); 
      } 
      return status; 
     } 

     private void closeJMS(QueueConnection queueConnection, 
        QueueSender queueSender, QueueReceiver queueReceiver) { 
      try { 
        if (queueSender != null) { 
         queueSender.close(); 
         queueSender = null; 
        } 
      } catch (JMSException e) { 
        queueSender = null; 
      } 

      try { 
        if (queueReceiver != null) { 
         queueReceiver.close(); 
         queueReceiver = null; 
        } 
      } catch (JMSException e) { 
        queueReceiver = null; 
      } 

      try { 
        if (queueConnection != null) { 
         queueConnection.close(); 
         queueConnection = null; 
        } 
      } catch (JMSException exception) { 
        queueConnection = null; 
      } 
     } 
} 

내 context.xml에 자원 :

<Resource 
    name="jms/QCF" 
    auth="Container" 
    type="com.ibm.mq.jms.MQQueueConnectionFactory" 
    factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory" 
    description="JMS Queue Connection Factory for sending messages" 
    HOST="1.1.1.1" 
    PORT="1414" 
    CHAN="CHANNEL" 
    TRAN="1" 
    QMGR="QMGR"/> 

답변

0

네트워크 문제 ... 서버 측의 네트워크 연결에서 NetBios를 사용하지 않도록 설정하면 트릭이 발생했습니다.

0

분명히 13초는 관리자를 큐에 연결을 설정하는 너무 많은 것입니다. 나는 그 문제가 당신의 네트워크에 있다고 생각한다. 네트워크 관리자에게 문의하여 문제를 해결하고 응용 프로그램을 다시 테스트하십시오.

+0

예. 내 대답 좀 봐. – Alaychem