【问题标题】:Detecting Webshere MQ Manager is available again检测 Websphere MQ Manager 再次可用
【发布时间】:2016-03-21 16:45:01
【问题描述】:

我有一个 C# 应用程序,它从 WebSphere 队列(MQ 版本 7.5)读取消息并将它们提交到另一个应用程序,我需要更新该应用程序以适应队列管理器停止或断开连接时的情况。我已更新队列管理器属性以添加“自动重新连接”选项,但我很难检测到队列管理器再次可用。

我的应用程序最多等待 3 秒以等待消息出现在队列中,然后,如果没有消息出现,则在循环并再次等待队列消息之前执行其他内务检查。

我的队列管理器初始化现在包括语句

QueueManagerProperties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT);

当我停止 MQ 服务器上的队列管理器时,我可以看到 QueueManager 属性 IsConnected 是否变为 false。如果我在队列管理器断开连接时尝试从队列执行“获取”操作,我会从底层 IBM MQ 接口库中收到“对象未设置为实例”错误。

但是,当我在 MQ 服务器上重新启动队列管理器时,我的应用程序中的 IsConnected 选项仍然为 false,因此我无法检测到何时可以安全地再次尝试从队列中读取消息。无论我做什么,我似乎都无法检测到队列管理器已重新连接,因此应用程序永远不会再次开始读取消息。

任何关于我需要更新的建议都将不胜感激。

【问题讨论】:

  • 确保您通过Client Channel Definition Table连接
  • MQ .NET 客户端将尝试重新连接到队列,默认时间为 30 分钟。如果它在那 30 分钟内失败,则应用程序必须再次发出“连接”呼叫。那么在您的应用程序发出“Get”调用多长时间后?
  • 在我的测试环境中,我尝试在 5 分钟内重新连接。但是,我注意到,如果我在队列管理器断开连接时尝试“获取”命令,则底层 IBM 库崩溃并出现“对象未设置为实例”错误。即,当与 MQ 服务器的连接中断时,我似乎无法发出 Get 命令。

标签: c# ibm-mq


【解决方案1】:

如果使用自动客户端重新连接功能,Get 调用将启动与队列管理器的重新连接。在重新连接过程中,Get 将出现挂起。如果调用返回异常,则为错误。你是最新的修复包吗?此错误可能已在最新的修复包中修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2016-01-27
    • 2012-08-27
    • 2011-03-10
    • 2013-04-06
    • 2011-02-10
    相关资源
    最近更新 更多