2

我使用 MQ v7 库(无 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 通道。

4

1 回答 1

1

好的,这里有一些有趣的可能性,但没有足够的描述来缩小范围,所以我将采用霰弹枪的方法,你可以从那里开始。

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

  • 应用程序是否在等待时指定 Fail If Quiescing?
  • 哪个版本的客户端和 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 小时更快地做出响应。准确的调优取决于前面讨论的 QMgr 和客户端版本。
  • 发生这种情况时,是否有任何孤立的通道实例仍在运行?当您执行 a 时DIS CHS(svrconn name),是否有任何条目未被活动程序考虑在内?如果您无法分辨,请将失败的程序移至专用的 SVRCONN 频道。
  • 主机服务器的系统范围的 TCP 超时设置为多少?

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

于 2012-10-24T11:59:25.837 回答