当连接断开或抛出异常时,我有一个断开队列连接的代码,如下所示

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


所以当我有一个'MQRC_RECONNECT_TIMED_OUT'时,上面的代码有问题
异常,那么当它执行queuemanager.Disconnect()时,它会引发异常“ MQRC_CONNECTION_BROKEN”,并且显然会由于抛出异常而破坏代码,因此当我使用queuemanager.Close()时,不会引发异常,并且服务稳定。

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

请帮忙。

最佳答案

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

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

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

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

1)您的队列管理器停机了这么长时间吗?

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

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

关于c# - QueueManager.Disconnect()和QueueManager.Close()的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33699902/

10-11 17:18