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