我使用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频道。
答案 0 :(得分:1)
好的,这里有一些有趣的可能性,并没有足够的描述来缩小范围,所以我会采用霰弹枪方法,你可以从那里开始。
等待时间过长的错误通常意味着套接字已超时或被防火墙或网络策略切断。
在这种情况下,客户端获得2195所以我希望在客户端显示错误。如果2195发生在客户端并且套接字消失后,QMgr将不会剪切FDC文件,因为此时它无法知道错误。客户端诊断可以更好地了解正在发生的事情。
在QMgr方面,2009年通常会产生一条消息,说明频道已断开连接,但没有FDC。但是,在TCP超出套接字之前,QMgr可能不知道通道已断开连接,并且在大多数系统上默认情况下该间隔为2小时。因此,连接丢失后,日志中的错误最多可能无法写入
。DIS CHS(svrconn name)
时,是否存在任何活动程序未考虑的条目?如果您无法判断,请将失败的程序移至专用的SVRCONN通道。如前所述,您使用的版本在调优和诊断方面有很大的不同。如果这是新开发,我建议的第一件事就是确保使用V7.5 client。它适用于任何QMgr,但调优和诊断优于早期版本。如果QMgr处于不支持它们的版本,您将无法获得会话共享或预读等功能,但您确实从所有纯粹的客户端改进中获益。