最近在帮BP测试公文传输,用了MQ。工程师反映,在数据接收的时候,总是抱错:
MQJE001: 完成代码是 2,原因为 2009
MQJE001: MQException 出现:完成代码是 2,原因为
2009
MQJE003: 传输消息缓冲区时出现 IO 错误
但是不影响消息的发布和接受。就是频繁在日志中出现这个提示。BP觉得心里不爽,就把我叫来,问问怎么办。
从网上查到,解决这个问题的几种方法:
1。在mq.ini文件中添加 KeepAlive=yes
2。升级MQ,于是把MQ升级到了6.0.2.5,
3。关闭防火墙
可是问题依旧。
没办法了之后看源代码,在数据接收程序的不同地方添加了注释,花了1天的时间,终于找到了原因了。
代码中使用了MQSimpleConnectionManager,但是由于代码经过n个人的手,很乱,没有把获取MQSimpleConnectionManager
的地方释放。唉!郁闷。
如下是使用MQSimpleConnectionManager的标准代码:
MQSimpleConnectionManager myConnMan=new MQSimpleConnectionManager();
myConnMan.setActive( MQSimpleConnectionManager.MODE_ACTIVE);
MQQueueManager qmgr=new MQQueueManager("my.qmgr.1", myConnMan);
:
:
(do something with qmgr)
:
qmgr.disconnect();
MQQueueManager qmgr2=new MQQueueManager("my.qmgr.1", myConnMan);
:
:
(do something with qmgr2)
:
qmgr2.disconnect();
myConnMan.setActive( MQSimpleConnectionManager.MODE_INACTIVE); //
BP的代码里面没有这一句,才导致那个2009的问题
http://www.webspherechina.net/uchome/space.php?uid=1790&do=blog&id=15
添加新评论0 条评论