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

Ibm mq 长时间空闲后放置消息不起作用,ibm-mq,Ibm Mq,我使用MQV7库(无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 o

我使用MQV7库(无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频道。

好的,这里有一些有趣的可能性,但没有足够的描述来缩小范围,因此我将采用鸟枪方法,您可以从那里开始

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

  • 应用程序是否指定在等待时停止时失败
  • 哪个版本的客户端和QMgr?一般来说,客户机的较新版本更好,即使使用较旧的QMGR。最好的情况是最近的客户端和最近的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超时设置为什么

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

JAR嵌入Java客户端,是v5.3 JAR o。使用v7 JAR解决了这个问题。谢谢你的回答。哦!这种情况经常发生。在某些情况下,我们会看到一个PMR,其中用户报告已安装WMQ客户端,但当我们查看FDC文件时,它报告的版本不同。仔细研究一下,通常会发现该应用程序捆绑了客户端jar,对已安装的客户端进行维护或修复不会对其产生任何影响。WMQ server的较新版本报告正在连接以帮助解决此问题的WMQ客户端的版本。