MQ出现2059错误如何快速断开
是这样的,我用JAVA写了一个连接MQ的接口,在使用过程中发现,业务功能在调用此接口后,如果MQ连接出现问题
会出现比较长时间的等待,由于数据处理是放在一个事物中的,这样就会导致功能页面长时间静止。
请问如何解决此问题。
public String sentData(){
String qManager = manger; //QueueManager name
String qName = qname;//Queue Name
MQQueueManager qMgr = null;
MQQueue queue = null ;
try {
//configure connection parameters
MQEnvironment.hostname=hostname;//MQ Server name or IP
//MQEnvironment.port=1414;//listenr port
if(log.isDebugEnabled())
log.debug("Connecting to queue hostname: "+hostname);
MQEnvironment.channel=channel;//Server-Connection Channel
if(log.isDebugEnabled())
log.debug("Connecting to queue channel: "+channel);
MQEnvironment.CCSID =ccsid;
if(log.isDebugEnabled())
log.debug("Connecting to queue ccsid: "+ccsid);
// Create a connection to the QueueManager
if(log.isDebugEnabled())
log.debug("Connecting to queue MQQueueManager: "+qManager);
qMgr = new MQQueueManager(qManager);
// Set up the options on the queue we wish to open
//int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
int openOptions = MQC.MQOO_OUTPUT|MQC.MQOO_BIND_ON_OPEN|MQC.MQOO_FAIL_IF_QUIESCING ;//-----------------
// Now specify the queue that we wish to open and the open options
if(log.isDebugEnabled())
log.debug("Accessing queue: "+qName);
queue = qMgr.accessQueue(qName, openOptions);
// Define a simple WebSphere MQ Message ...
MQMessage msg = new MQMessage();
// ... and write some text in UTF8 format
//File file = new File("d:\\sd.000000129497.00000001.13500201.data");
// for(int m=0;m<187;m++){
// System.out.print(""+data[m]);
//
// }
//data=getBytesFromFile(file);
//FileOutputStream fos = new FileOutputStream(new File("D:/data.txt"));
//写入文件
//fos.write(data);
// for(int m=0;m<datalength;m++){
// System.out.print(" "+data[m]);
//
// }
String head="";
for(int m=recvcode.length();m<8;m++){
head=head+"0";
}
recvcode=head+recvcode;
recv=recvcode.getBytes();
msg.correlationId=recv;
//Specify the default put message options
MQPutMessageOptions pmo = new MQPutMessageOptions();
int totallen;
int totalduan;
// int messlen = 8*1024;
totallen = 0;
totalduan = 0;
// 2011-1-13 玄加林调整--解决数据量大时发送失败的问题
// while((totallen + messlen) < datalength)////8888888
// {
// pmo.options = 32770;//---------------------------
// msg.messageFlags = 2;//-----------------------
// msg.write(data,totallen,messlen);//8888888888888
// queue.put(msg, pmo);
// totallen += messlen;
// totalduan ++;
// }
msg.messageFlags = 4;
msg.write(data,totallen,datalength-totallen);
queue.put(msg, pmo);
totalduan++;
// Put the message to the queue
if(log.isDebugEnabled())
log.debug("Sending a message...");
return "发送成功";
}
catch (MQException ex) {
//出现异常直接关闭连接
try {
if(qMgr != null){
qMgr.disconnect();
}
} catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(log.isDebugEnabled())
log.debug("A WebSphere MQ Error occured : Completion Code "
+ ex.completionCode + " Reason Code " + ex.reasonCode);
return "发送失败";
}
catch (java.io.IOException ex) {
if(log.isDebugEnabled())
log.debug("An IOException occured whilst writing to the message buffer: "
+ ex);
return "发送失败";
}
finally{ //根据玄加林的要求,增加关闭mq连接的操作 2010-12-21 ---linpeng
try {
queue.close();
} catch (MQException e) {
// TODO Auto-generated catch block
try {
qMgr.disconnect();
} catch (MQException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
try {
qMgr.disconnect();
} catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}