长时间闲置后放置消息不起作用

时间:2012-10-24 10:59:29

标签: ibm-mq

我使用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 个答案:

答案 0 :(得分: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。但是,在TCP超出套接字之前,QMgr可能不知道通道已断开连接,并且在大多数系统上默认情况下该间隔为2小时。因此,连接丢失后,日志中的错误最多可能无法写入

  • 可以调整频道以快速响应2小时。确切的调整取决于前面讨论过的QMgr和客户端版本。
  • 当发生这种情况时,是否还有任何孤立的通道实例在运行?当您执行DIS CHS(svrconn name)时,是否存在任何活动程序未考虑的条目?如果您无法判断,请将失败的程序移至专用的SVRCONN通道。
  • 什么是主机服务器的系统范围TCP超时设置为?

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