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"/>
예. 내 대답 좀 봐. – Alaychem