当连接断开或抛出异常时,我有一个断开队列连接的代码,如下所示
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/