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

本文关键字:QueueManager 区别 Close Disconnect | 更新日期: 2023-09-27 18:21:47

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

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

因此,当我有一个"MQRC_RECONNECT_TIMED_OUT"时,我对上面的代码有问题当它执行队列管理器时发生异常。Disconnect()会抛出一个异常"MQRC_CONNECTION_BROKEN",很明显,当抛出异常时会破坏代码,所以当我使用queuemanager时。Close()没有引发异常,服务稳定。

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

请帮忙。

QueueManager.Disconnect()和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) 如果您使用的是多实例队列管理器,为什么应用程序并没有连接到备用实例?