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()没有引发异常,服务稳定。
有什么区别?我应该使用什么来删除和重新创建新连接?
请帮忙。
MQQueueManager.Disconnect()
关闭所有打开的队列/主题/已处理的队列,并关闭与队列管理器的连接。在已断开连接的连接上调用Disconnect()
有助于释放内部分配的任何资源。
MQQueueManager.Close
方法实际上是其基类的继承方法,该方法关闭MQQueueManager
已分配的任何内部对象。但是您必须始终调用Disconnect
而不是Close
,因为Disconnect
方法关闭了与队列管理器的连接,而Close
则不关闭。
出现MQRC_RECONNECT_TIMED_OUT
错误后,您必须使用新的MQQueueManager构造函数再次创建新连接。
您收到一个MQRC_RECONNECT_TIMED_OUT
错误,这意味着已建立的连接已断开(无论出于何种原因),MQ客户端尝试重新连接30分钟,但仍然无法建立连接。你必须了解原因:
1) 你的队列管理器停了那么久吗?
2) 是否存在阻止连接到队列管理器的网络问题?
3) 如果您使用的是多实例队列管理器,为什么应用程序并没有连接到备用实例?