MQ出现2059错误如何快速断开

saka00 2012-03-28 02:33:24
是这样的,我用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();
}
}

}
...全文
1699 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_diy 2012-08-27
  • 打赏
  • 举报
回复
加入错误代码
W99841 2012-07-19
  • 打赏
  • 举报
回复
加入错误返回代码
sun007700 2012-04-10
  • 打赏
  • 举报
回复
有定义超时时间吗?
sun007700 2012-04-10
  • 打赏
  • 举报
回复
代码整理下。。没法看。
sun007700 2012-04-10
  • 打赏
  • 举报
回复
有定义超时时间吗?
JasonYao 2012-04-01
  • 打赏
  • 举报
回复
有定义超时时间吗?
JasonYao 2012-04-01
  • 打赏
  • 举报
回复
代码整理下。。没法看。
saka00 2012-03-30
  • 打赏
  • 举报
回复
已解决,捕捉异常后
switch (ex.reasonCode)
{
//连接断开
case 2009:
//队列管理者无效或未知
case 2058:
//队列管理者无效
case 2059:
//意外的错误发生
case 2195:
//服务器正在启动
case 2161:
//服务器正在关闭
case 2162:
//无权访问服务器队列管理者
case 2035:
//其他异常
default:

}
根据异常类型马上进行处理,也可捕捉异常后马上关闭连接
try {
if(qMgr != null){
qMgr.disconnect();
}
} catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JetLinks开源物联网平台基于Java8、Spring Boot 2.x、WebFlux、Netty、Vert.x、Reactor等开发,是一个开箱即用,可二次开发的企业级物联网基础平台。平台实现了物联网相关的众多基础功能,能帮助你快速建立物联网相关业务系统。 JetLinks开源物联网平台核心特性: 支持统一物模型管理,多种设备,多种厂家,统一管理。 统一设备连接管理,多协议适配(TCP、MQTT、UDP、CoAP、HTTP等),屏蔽网络编程复杂性,灵活接入不同厂家不同协议的设备。 灵活的规则引擎,设备告警,消息通知,数据转发。可基于SQL进行复杂的数据处理逻辑。 地理位置:统一管理地理位置信息,支持区域搜索。 数据可视化:实现拖拽配置数据图表,设备组态等。 JetLinks开源物联网平台技术栈: Spring Boot 2.2.x Spring WebFlux 响应式Web支持 R2DBC 响应式关系型数据库驱动 Project Reactor 响应式编程框架 Netty、Vert.x 高性能网络编程框架 ElasticSearch 全文检索,日志,时序数据存储 PostgreSQL 业务功能数据管理 hsweb framework 4 业务功能基础框架     JetLinks开源物联网平台 更新日志: v1.9 1、增加设备独立物模型支持,可给单独的设备配置物模型. 2、基本实现GB28181国标视频设备接入,支持直播,云台控制,级联操作.(选配模块) 3、RabbitMQ增加routeKey配置,可在配置文件中指定device.message.writer.rabbitmq.consumer-route-key和device.message.writer.rabbitmq.producer-route-key.(Pro) 4、当设置了device.message.writer.rabbitmq.consumer=false时,不创建MQ消费者.(Pro) 5、设备支持独立物模型,可单独配置设备的物模型. 6、适配tdengine 2.0.16.0,优化sql长度策略. (pro) 7、优化规则引擎编辑器,实现组件模块化动态加载.(Pro) 8、修复启动服务时,如果某个产品物模型发布失败,导致后面的产品终止发布的问题. 9、增加ignoreLatest消息头,message.addHeader("ignoreLatest",true) 忽略记录最新数据到数据库. 10、修复租户下操作设备告警提示无权限.(Pro) 11、优化租户在解绑成员时,同时解绑成员的资产信息.(Pro) 12、优化子设备消息回复处理 13、物模型属性增加存储方式功能,可配置部分属性不存储. 14、增加虚拟属性功能,可通过规则来计算出虚拟属性值.(Pro) 15、增加租户成员绑定(TenantMemberBindEvent),解绑(TenantMemberUnBindEvent)事件.可通过spring-event订阅处理此事件.(Pro) 16、优化子设备状态检查,当检查子设备状态时,将会尝试发送ChildDeviceMessage<DeviceStateCheckMessage>给网关,处理后返回ChildDeviceMessageReply<DeviceStateCheckMessageReply>. 17、增加ClickHouse设备数据存储策略支持.(Pro) 18、增加权限过滤功能,可配置禁止赋予自己没有的权限给其他用户.hsweb.permission.filter相关配置 19、设备和产品的租户绑定逻辑优化: 绑定设备时,自动绑定产品.解绑产品时,自动解绑设备.(Pro) 20、用户管理增加租户权限控制.(Pro) 21、当向keepOnline的设备发送消息时,如果原始连接已断开,将返回CONNECTION_LOST错误. 22、设置keepOnline的会话将被持久化,重启服务后自动恢复.(Pro) 23、默认关闭设备最新数据存储,通过jetlinks.device.storage.enable-last-data-in-db=true开启.(Pro) 24、属性物模型增加属性值来源,配置为手动时,在发送修改属性指令(WritePropertyMessage)时,将直接生效,不会发送到设备. 25、优化租户资产解绑逻辑,当删除数据时,解绑资产全部的绑定关系.(Pro) 26、用户管理,机构管理增加租户端支持,租户可以自己管理自己的用户和机构.(Pro)

2,633

社区成员

发帖
与我相关
我的任务
社区描述
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
社区管理员
  • WebSphere社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧