【问题标题】:Re-connection settings in IBM.XMSIBM.XMS 中的重新连接设置
【发布时间】:2015-09-12 06:56:21
【问题描述】:

我们在 IBM.XMS 中是否具有 Re-connection Attempt CountRe-connection Attempt DelayRe-connection Attempt Timeout 设置的功能,就像我们在 Tibco 中一样?

我将在 .NET 应用程序中使用 IBM.XMS 向 IBM MQ 发送/接收消息。如果由于某种原因 IBM MQ 出现故障,我相信这些设置将允许 .NET 应用程序尝试重新连接,从而避免应用程序发生任何崩溃。

更新

我在http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/xms_automatic_client_reconnection.htm 获得了一些信息。使用这个我正在使用以下内容:

oConFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
oConFactory.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, String.Format("{0}({1})", con.Host, con.Port));
oConFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, ((con.ReconnectTimeout.HasValue && con.ReconnectTimeout.Value != 0) ? con.ReconnectTimeout.Value : XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT));

但这不起作用。在我停止队列管理器的那一刻,代码正在中断。有什么建议吗?

【问题讨论】:

  • Per Shashi 的回应,你是如何停止 QMgr 的?您是否尝试过使用 STATE(INACTIVE) 停止频道(假设它是客户端)而不是停止 QMgr?

标签: .net ibm-mq xms


【解决方案1】:

是的!请使用现代版本的 MQ 客户端和 QMgr。功能和稳定性都得到了极大的提升,包括使用客户端重连功能的能力。请看:

Automatic client reconnection in .NET

相关且重要的主题包括:

前面的链接来自 v7.5 文档。如果您需要 v8.0 文档(强烈建议使用撰写本文时最新的 v8.0 QMgr 和客户端),请转到 here

如果您需要 QMgr 在您的个人工作站上进行测试,IBM 已经发布了一个名为 WebSphere MQ Advanced for Developers 的全功能、永不过期的产品。

随客户端库一起提供,但如果您只需要客户端库,只需下载独立客户端即可。转到SupportPacs landing page 并查找像 MC[vr] 这样的名称。之后的命名应该是直观的。 SupportPac MQC8是V8.0客户端,MQC75是v7.5客户端,以此类推

如果您需要 WMQ Explorer 下载,请选择 SupportPac MS0T。在这种情况下,我强烈建议您同时获取 MS0P 并将其解压缩到 Explorer Dropins 文件夹。

【讨论】:

  • 感谢 Rob,您提供的链接与 IBM MQ Classes for .NET 有关。我正在使用 IBM.XMS(.NET 的消息服务客户端)。我们如何在 IBM.XMS 中完成同样的任务?我在www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/… 获得了一些信息,但它不起作用。是否有一些与使用 IBM.XMS 重新连接相关的工作示例?
  • “它不工作”是什么意思?在这种情况下,“它”是什么?链接页面说,可以在程序、托管对象、CCDT 和 client.ini 文件中进行重新连接设置,如果设置了多个,则有优先顺序。要说它不起作用,需要知道每个地方的设置是什么。 (我来自密苏里州 - 在我相信你之前,你必须告诉我它是否设置在给定位置,所以我总是想看到所有这些。)
  • Rob,我指的是我稍后在我的问题中添加的代码 sn-p。当我从 MQ Explorer 停止队列管理器时,它不起作用。我听从了Shashi的建议,它正在工作。但我也需要它以其他方式工作(请参阅我对 Shashi 的帖子的 cmets)。有办法吗?
  • 如果 QMgr 被管理员关闭,MQ 会认为这是故意的,并要求管理员故意指定 -r。但是,如果它崩溃,客户端应该重新连接。我只能假设通过 Windows 对话框反弹服务被解释为故意关闭并且不会触发该行为。您是否尝试过从进程表中杀死 QMgr?请参阅Stopping a queue manager manually
  • 我只是从管理工具 > 服务中停止 IBM MQ 服务。因此,我相信只有在通过指定 -r 选项关闭 QMgr 时,客户端应用程序才会尝试重新连接。这是唯一的办法吗?
【解决方案2】:

您没有提到如何停止队列管理器。如果您使用endmqm <qm> 命令停止队列管理器,则不会发生重新连接。您将需要使用endmqm -r <qm> 停止队列管理器。 -r 选项通知客户端应用程序重新连接。如果您使用MQ Explorer,则在停止队列管理器时选择Stop Queue Manager 面板上的"Instruct reconnectable clients to reconnect" 选项。

【讨论】:

  • 我使用的是 MQ Explorer。我会试试你的建议。当出现网络故障或由于某种原因正在重新启动 MQ 服务时,这是否相同?
  • Shashi,我尝试了您的建议(选择“指示可重新连接的客户端重新连接”),它奏效了。但是当我从 Services 重启 MQ 服务时,应用程序直接崩溃了。
  • 崩溃是什么意思?
  • 理想情况下,应用程序应在重新连接超时期间尝试重新连接,然后崩溃(生成未处理的异常),但在我停止服务的那一刻,它会立即崩溃。
  • 你得到了什么未处理的异常?您是否在异常中获得 MQRC 2009?停止 MQ 服务将停止队列管理器,这被视为正常关闭。如果使用 -r 或突然终止来停止队列管理器,则会发生重新连接。
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多