.net WMQ客户端停止mq get而不引发任何异常

.net WMQ客户端停止mq get而不引发任何异常,.net,ibm-mq,mq,.net,Ibm Mq,Mq,我有一个windows服务,它侦听MQ队列管理器并获取消息。网络中断,MQ.Net客户端停止侦听MQ队列。应用程序也不例外。所以当我看到事件日志时,出现了一个错误 进程(1612.3)用户(系统)程序(MMQ.Receiver.exe)主机(*****)安装(Installation1)VRMF(7.5.0.4) 从主机接收时出错 通过TCP/IP从接收数据时出错。这可能是由于通信故障造成的 TCP/IP(socket.Receive)调用的返回代码为10054(X'2746')。记录这些值并告

我有一个windows服务,它侦听MQ队列管理器并获取消息。网络中断,MQ.Net客户端停止侦听MQ队列。应用程序也不例外。所以当我看到事件日志时,出现了一个错误

进程(1612.3)用户(系统)程序(MMQ.Receiver.exe)主机(*****)安装(Installation1)VRMF(7.5.0.4)

从主机接收时出错

通过TCP/IP从接收数据时出错。这可能是由于通信故障造成的

TCP/IP(socket.Receive)调用的返回代码为10054(X'2746')。记录这些值并告诉系统管理员

MQ客户机文件具有与以下行相同的上述错误

IBM.WMQ.MQTCPConnection.Receive

我应该如何处理这些类型的错误。正如我所说,代码中没有抛出错误。下面是我的代码

try
            {
                if (queuereceive == null)
                {                        
                    RetryConnection();
                }
                else
                {
                    inboundmsg = new MQMessage();                        
                    queuereceive.Get(inboundmsg, queueGetMessageOptions);

                    //code where it receives the message and do the process 

                    inboundmsg.ClearMessage();
                }
            }
            catch (MQException mqe)
            {
                inboundmsg = null;
                if (mqe.Reason == MQC.MQRC_NO_MSG_AVAILABLE)
                {

                }
                else if (mqe.Reason == MQC.MQRC_CONNECTION_QUIESCING || mqe.Reason == MQC.MQRC_CONNECTION_BROKEN)
                {
                    if (queueManagerreceive != null)
                    if (queueManagerreceive.IsConnected)
                    {
                        queueManagerreceive.Disconnect();
                    }

                    RetryConnection(); //retire connection if an exception is thrown 
                }
                else
                {
                    Logger.Error(string.Format("MQQueue::Get ended with {0} ", mqe.Message));
                    if (queueManagerreceive != null)
                    if (queueManagerreceive.IsConnected)
                    {
                        queueManagerreceive.Disconnect();
                    }

                    // treat truncated message as a failure 
                    if (mqe.Reason == MQC.MQRC_TRUNCATED_MSG_FAILED)
                    {
                        Logger.Error(string.Format("MQQueue::Get ended with {0}  ", mqe.Message));
                    }

                    RetryConnection(); //retire connection if an exception is thrown 
                }
            }

注意:RetryConnection重新连接到MQ队列

尝试将日志添加到连接中断异常处理案例中。我认为您的客户机应用程序刚刚抛出了一个MQRC_CONNECTION_break类型的MQException,在这种情况下,您的代码会自动断开连接并重新连接。(注意10054通常意味着另一端已决定关闭连接,如果出现网络问题,该连接将在此处连接)

在我的代码中,它会抛出异常并尝试重新连接,直到成功,我也有日志记录,我刚刚在代码中删除了它。但在这种情况下,服务没有引发异常。我在事件日志中发现错误。应该是什么情况?有没有办法增加MQ客户端上的默认重新连接超时(即30分钟)?30分钟重新连接超时是什么意思。一旦连接断开,您应该能够重试进行连接。如果问题是原始连接仍然出现在服务器上,锁定新连接需要的资源,考虑您是SaReNv> 0,使用HbIt(MQV7客户机+),还是需要使用KeePovior(尽管默认为2小时)。。当网络中断时,客户端等待30分钟重新连接,然后抛出异常MQRC_reconnect_结束。我说的是30分钟的超时