2015-11-13 87 views
1

我时,我有一个“MQRC_RECONNECT_TIMED_OUT” 例外,那么当它做了的QueueManager其断开queuemanger当连接中断或异常抛出类似下面QueueManager.Disconnect()和QueueManager.Close()的区别?

  if (queueManagerreceive != null) 
      if (queueManagerreceive.IsConnected) 
      { 
       if (queuereceive != null) 
       { 
        queuereceive.Close(); 
       } 
       queueManagerreceive.Disconnect(); 
      } 

所以我有问题与上面的代码的代码.Disconnect()它会抛出一个异常“MQRC_CONNECTION_BROKEN”,显然当抛出异常时抛出异常,所以当我使用queuemanager.Close()时,抛出异常并且服务很稳定。

有什么区别?我应该使用什么来删除和重新创建一个新的连接?

请帮忙。

回答

2

MQQueueManager.Disconnect()关闭所有打开的队列/主题/处理,并关闭与队列管理器的连接。在已断开的连接上调用Disconnect()有助于释放内部分配的任何资源。

MQQueueManager.Close方法实际上是它的基类的继承方法,并且此方法关闭MQQueueManager已分配的任何内部对象。 。但是您必须始终呼叫Disconnect而不是Close,因为Disconnect方法会关闭与队列管理器的连接,而Close则不会。

MQRC_RECONNECT_TIMED_OUT错误之后,您必须使用新的MQQueueManager构造函数重新创建一个新连接。

您将收到MQRC_RECONNECT_TIMED_OUT错误,这意味着建立的连接已中断(无论出于何种原因),并且MQ客户端尝试重新连接30分钟但仍无法建立连接。你必须明白这个原因:

1)你的队列管理器是否停留了那么久?

2)是否有网络问题阻止连接到队列管理器?

3)如果您使用的是多实例队列管理器,为什么应用程序没有连接到备用实例?

+0

谢谢你给我一个关于断开连接和关闭的清晰想法。有5分钟的网络中断,但仍然没有重新连接的队列管理器。但我试图用网络测试更长的时间,所以当引发MQRC_RECONNECT_TIMED_OUT异常,并试图使用MQQueueManager.Disconnect();它没有释放资源。它在MQQueueManager.Disconnect()上抛出异常。该服务刚刚闲置。应该是什么情况?那是什么做错了? – user3067170

+0

您是如何确定资源未被释放的?抛出了什么异常?你可以更新你的问题的所有细节? – Shashi

+0

我编辑了我的问题 – user3067170