QueueManager.Disconnect() 和 QueueManager.Close() 的区别?

use*_*170 2 .net c# mq ibm-mq

我有一个代码,它在连接断开或抛出异常时断开队列管理器,如下所示

            if (queueManagerreceive != null)
            if (queueManagerreceive.IsConnected)
            {
                if (queuereceive != null)
                {
                    queuereceive.Close();
                }
                queueManagerreceive.Disconnect();
            }
Run Code Online (Sandbox Code Playgroud)

所以当我有一个 'MQRC_RECONNECT_TIMED_OUT' 异常时,我对上面的代码有问题,然后当它执行 queuemanager.Disconnect() 时它抛出一个异常“MQRC_CONNECTION_BROKEN”并且显然这会破坏代码作为异常抛出所以当我使用 queuemanager 时。 Close() 没有抛出异常,服务稳定。

有什么不同?我应该使用什么来删除并重新创建新连接?

请帮忙。

Sha*_*shi 5

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

MQQueueManager.Close方法实际上是其基类的继承方法,此方法关闭MQQueueManager已分配的所有内部对象。. 但是您必须始终调用Disconnect而不是Close因为该Disconnect方法关闭与队列管理器的连接而Close不会。

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

您收到MQRC_RECONNECT_TIMED_OUT错误消息,这意味着已建立的连接已中断(无论出于何种原因),MQ 客户端尝试重新连接 30 分钟,但仍无法建立连接。您必须了解这样做的原因:

1) 您的队列管理器停机了那么久吗?

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

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