2012-10-24 80 views
2

我用MQ v7库(No JMS)编写了一个简单的Java客户机。我尝试使用下面的模式放在一个队列中的消息:长时间空闲后放置消息不起作用

Put a message 
Wait for x minutes 
Put a message again 

它的工作原理,但如果空闲时间过长(5-7分钟),我收到以下错误:

MQJE001: An MQException occurred: Completion Code 2, Reason 2195 
MQJE007: IO error reading message data 
Error occured during API call - reason code0 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: An MQException occurred: Completion Code 2, Reason 2009 
MQJE003: IO error transmitting message buffer 
MQJE001: Completion Code 2, Reason 2009 
An MQSeries error occurred : Completion code 2 Reason code 2009 
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2009 
     at com.ibm.mq.MQQueue.put(MQQueue.java:1511) 

在读取主题上的多个线程后,此错误通常会创建FDC转储,但我在系统和队列管理器日志中没有任何内容。该频道是一个SVRCONN频道。

回答

1

好吧,这里有一些有趣的可能性,并没有足够的描述来缩小非常多,所以我会采取霰弹枪的方法,你可以从那里去。

长时间等待的错误通常意味着套接字超时或被防火墙或网络策略切断。

  • 该应用程序是否指定失败如果静默等待?
  • 哪个版本的客户端和QMgr?一般来说,即使使用旧版的QMgrs,客户端的更新版本也会更好。最好的情况是最近的客户端最近的QMgr,在这种情况下,WMQ原生协议心跳比TCP心跳更可靠。你提到过V7,但可能是V7.0.0,V7.0.1,V7.1或V7.5。

在这种情况下,它是客户获得2195所以我预计错误,显示在客户端上。如果2195发生在客户端,并且在套接字消失之后,QMgr将不会剪切FDC文件,因为那时它不知道错误。客户端诊断可以更清楚地了解正在发生的事情。

  • 您是从IBM的媒体获取jar文件还是安装客户端?如果您拥有完整的客户端,则可以有多种跟踪和本地诊断的选项。否则,你只有Java跟踪工具。
  • 客户端的本地错误日志文件或FDC显示什么?

在QMgr方面,2009年通常会产生一条消息,说明通道已断开连接,但没有FDC。但是,QMgr可能不知道通道已断开连接,直到TCP超时为止,并且大多数系统默认的间隔时间为2小时。因此在连接丢失后,日志中的错误可能不会写入长达两小时的

  • 可以调整频道以响应快于2小时的LOT。确切的调整取决于前面讨论的正在使用的QMgr和客户端版本。
  • 发生这种情况时,是否还有剩余的孤立通道实例在运行?当你做一个DIS CHS(svrconn name)是否有任何不被活动程序记录的条目?如果无法辨别,请将失败的程序移至专用的SVRCONN通道。
  • 什么是主机服务器的全系统TCP超时设置为?

如前所述,您使用的版本在调整和诊断方面有很大不同。如果这是新的开发,我会建议的第一件事是确保您使用V7.5 client。它可以与任何QMgr一起使用,但调优和诊断比早期版本更好。如果QMgr的版本不支持它们,您将不会获得对话共享或预读的功能,但您确实从所有纯粹的客户端改进中受益匪浅。

+0

罐子被嵌入在Java客户端,它是v5.3 jars o_O。使用v7 jar解决了这个问题。 Thx为答案。 – Sydney

+0

D'oh!这发生了很多。在某些情况下,我们看到用户报告已安装WMQ客户端的PMR,但当我们查看FDC文件时,它会报告不同的版本。挖掘一下,通常情况下,应用程序捆绑了客户端jar,并且没有对已安装的客户端应用维护或修复的影响。新版本的WMQ服务器报告正在连接的WMQ客户端的版本以帮助解决此问题。 –