问题描述
是这样的,我用JAVA写了一个连接MQ的接口,在使用过程中发现,业务功能在调用此接口后,如果MQ连接出现问题会出现比较长时间的等待,由于数据处理是放在一个事物中的,这样就会导致功能页面长时间静止。请问如何解决此问题。publicStringsentData(){StringqManager=manger;//QueueManagernameStringqName=qname;//QueueNameMQQueueManagerqMgr=null;MQQueuequeue=null;try{//configureconnectionparametersMQEnvironment.hostname=hostname;//MQServernameorIP//MQEnvironment.port=1414;//listenrportif(log.isDebugEnabled())log.debug("Connectingtoqueuehostname:"+hostname);MQEnvironment.channel=channel;//Server-ConnectionChannelif(log.isDebugEnabled())log.debug("Connectingtoqueuechannel:"+channel);MQEnvironment.CCSID=ccsid;if(log.isDebugEnabled())log.debug("Connectingtoqueueccsid:"+ccsid);//CreateaconnectiontotheQueueManagerif(log.isDebugEnabled())log.debug("ConnectingtoqueueMQQueueManager:"+qManager);qMgr=newMQQueueManager(qManager);//Setuptheoptionsonthequeuewewishtoopen//intopenOptions=MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT;intopenOptions=MQC.MQOO_OUTPUT|MQC.MQOO_BIND_ON_OPEN|MQC.MQOO_FAIL_IF_QUIESCING;//-----------------//Nowspecifythequeuethatwewishtoopenandtheopenoptionsif(log.isDebugEnabled())log.debug("Accessingqueue:"+qName);queue=qMgr.accessQueue(qName,openOptions);//DefineasimpleWebSphereMQMessage...MQMessagemsg=newMQMessage();//...andwritesometextinUTF8format//Filefile=newFile("d:\sd.000000129497.00000001.13500201.data");//for(intm=0;m<187;m++){//System.out.print(""+data[m]);////}//data=getBytesFromFile(file);//FileOutputStreamfos=newFileOutputStream(newFile("D:/data.txt"));//写入文件//fos.write(data);//for(intm=0;m<datalength;m++){//System.out.print(""+data[m]);////}Stringhead="";for(intm=recvcode.length();m<8;m++){head=head+"0";}recvcode=head+recvcode;recv=recvcode.getBytes();msg.correlationId=recv;//SpecifythedefaultputmessageoptionsMQPutMessageOptionspmo=newMQPutMessageOptions();inttotallen;inttotalduan;//intmesslen=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++;//Putthemessagetothequeueif(log.isDebugEnabled())log.debug("Sendingamessage...");return"发送成功";}catch(MQExceptionex){//出现异常直接关闭连接try{if(qMgr!=null){qMgr.disconnect();}}catch(MQExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}if(log.isDebugEnabled())log.debug("AWebSphereMQErroroccured:CompletionCode"+ex.completionCode+"ReasonCode"+ex.reasonCode);return"发送失败";}catch(java.io.IOExceptionex){if(log.isDebugEnabled())log.debug("AnIOExceptionoccuredwhilstwritingtothemessagebuffer:"+ex);return"发送失败";}finally{//根据玄加林的要求,增加关闭mq连接的操作2010-12-21---linpengtry{queue.close();}catch(MQExceptione){//TODOAuto-generatedcatchblocktry{qMgr.disconnect();}catch(MQExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}e.printStackTrace();}try{qMgr.disconnect();}catch(MQExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}
解决方案
解决方案二:
已解决,捕捉异常后switch(ex.reasonCode){//连接断开case2009://队列管理者无效或未知case2058://队列管理者无效case2059://意外的错误发生case2195://服务器正在启动case2161://服务器正在关闭case2162://无权访问服务器队列管理者case2035://其他异常default:}根据异常类型马上进行处理,也可捕捉异常后马上关闭连接try{if(qMgr!=null){qMgr.disconnect();}}catch(MQExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}
解决方案三:
代码整理下。。没法看。
解决方案四:
有定义超时时间吗?
解决方案五:
有定义超时时间吗?
解决方案六:
代码整理下。。没法看。
解决方案七:
有定义超时时间吗?
解决方案八:
加入错误返回代码
解决方案九:
加入错误代码