gpt4 book ai didi

c# - 一段时间后重新连接到 QueueManager 时,在 MQ 客户端 (C#) 上获取错误原因代码 2059

转载 作者:行者123 更新时间:2023-11-30 22:45:36 25 4
gpt4 key购买 nike

一段时间后我无法重新连接到 MQQueueManager,因为当我构建 MQQueueManager 的新对象时抛出异常(原因代码 2059 - MQRC_Q_MGR_NOT_AVAILABLE)。我的客户端应用程序是用 .NET/C# 编写的,我在 Win2003 上运行它。

但是,在我重新启动客户端应用程序后,我可以连接到 QM。这表明 QM 库中的某些状态不正确?如何重置代码中的状态以便重新连接到 QM?有没有办法从客户端应用程序代码重置/断开与 QM 的所有事件 TCP 连接?

我的连接代码:

    Hashtable properties = new Hashtable();    properties.Add( MQC.HOST_NAME_PROPERTY, Host );    properties.Add( MQC.PORT_PROPERTY, Port );    properties.Add( MQC.USER_ID_PROPERTY, UserId );    properties.Add( MQC.PASSWORD_PROPERTY, Password );    properties.Add( MQC.CHANNEL_PROPERTY, ChannelName );    properties.Add( MQC.TRANSPORT_PROPERTY, TransportType );    // Following line throws an exception randomly    MQQueueManager queueManager = new MQQueueManager( qmName, properties );

堆栈跟踪:

    Source: amqmdnet    CompletionCode: 2    ReasonCode: 2059    Reason: 2059    Stack Trace:     at IBM.WMQ.MQBase.throwNewMQException()     at IBM.WMQ.MQQueueManager.Connect(String queueManagerName)     at IBM.WMQ.MQQueueManager..ctor(String qmName, Hashtable properties)     at WebSphereMQOutboundAdapter.WebSphereMQOutbound.ConnectToWebSphereMQ()

最佳答案

连接是按线程进行的,因此如果您在先前的 QMgr 对象仍处于实例化状态时尝试创建新连接,您会得到这个。如果您在创建新对象之前关闭先前的连接并销毁该对象,您应该没问题。由于队列和其他 WMQ 对象依赖于连接句柄,因此它们也需要销毁,然后在建立新连接后重新实例化。

对于这种行为当然还有其他一些解释,但这些解释的可能性要小得多。例如, channel 导出或(在 WMQ v7 中)配置可能会限制来自给定 IP 地址的同时连接数。当连接被切断而不是关闭时,在 QMgr 端保持连接的 channel 代理必须在 QMgr 看到连接已关闭之前超时。如果存在连接限制,这些“幽灵”连接会减少可用池。但正如我所说,这远不如在尝试重新连接之前不清理旧对象的程序常见。

这也有可能是一个错误。为了减少这种可能性,并出于各种其他原因(例如 WMQ v6 明年将终止使用),我建议在客户端和服务器端为该项目使用 WMQ v7.0.1.2。一般来说,只要坚持使用 v6 功能,就可以将 v7.0.1.2 客户端与 v6.0.x 服务器一起使用。除其他外,.Net 代码更好地集成到 v7 中,Cat-3 SupportPacs 现在包含在基本安装媒体中,而不是单独下载。

关于c# - 一段时间后重新连接到 QueueManager 时,在 MQ 客户端 (C#) 上获取错误原因代码 2059,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com