【问题标题】:IBM MQ XMS.NET client reconnect timeout can't be changed无法更改 IBM MQ XMS.NET 客户端重新连接超时
【发布时间】:2019-05-26 07:41:36
【问题描述】:

IBM MQ 有一个automatic client renonnect 功能,它的默认超时为 30 分钟。 30 分钟后,它停止尝试重新连接 (source - p35)。

我想更改超时,使其重试持续更长时间(例如 2 小时)。我想我可以为此使用属性XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT,因为它在 XMSC 类中可用。

测试

我可以通过阻止客户端应用程序连接到 IBM MQ 的端口 1414 来模拟连接失败。出于测试目的,我将超时值降低到 5 分钟(而不是 30 分钟)。

我在日志中看到的是客户端应用程序接收到XMSException,原因码为 2544(重新连接):

IBM.XMS.XMSException: MQ delivered an asynchronous event with completion code 1, and reason 2544.
XMSWMQ2014.explanation
XMSWMQ2014.useraction

Linked Exception : CompCode: 1, Reason: 2544

这种情况持续了 30 分钟,之后,我收到了一个 XMSException,原因代码为 2009(连接中断)。并且自动重新连接失败。

XMSException occurred: IBM.XMS.XMSException: MQ delivered an asynchronous event with completion code 2, and reason 2009.
XMSWMQ2014.explanation
XMSWMQ2014.useraction

Linked Exception : CompCode: 2, Reason: 2009

我可以得出结论,更改超时值没有效果...我是否以错误的方式配置了重新连接超时?

下面有一段代码sn-p:

XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory connectionFactory = factory.CreateConnectionFactory();
connectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "hostname");
connectionFactory.SetIntProperty(XMSC.WMQ_PORT, 1414);
connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, "channel_name");
connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "*");
connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, 300); //300 seconds = 5 minutes

IConnection conn = connectionFactory.CreateConnection();
conn.Start();

IBM MQ 客户端版本:8.0.0.5

备注

【问题讨论】:

  • 您是否尝试过以后的版本,例如 8.0.0.11?
  • @JoshMc 我什至在 v9.0.5.0 上试过,没有效果...
  • 8.0.0.11 比 9.0.5 更新,后者是最后一个 9.0 CD 版本。还有 9.1.0.1 和 9.1.1(现在包括 .net 核心支持)。
  • 您尝试过托管模式吗?
  • Ozkan,经过进一步审查,IBM 回应说,非托管 XMS.NET 目前不可能支持 XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT,因为非托管 XMS.NET 使用了底层 MQ C API 库,并且在那些底层库中它是无法以编程方式设置 MQ 重新连接超时,即使他们必须为此目的依赖 mqclient.ini/CHANNELS:/MQReconnectTimeout 设置。因此,他们将更新 IBM MQ 知识中心以说明此限制。

标签: c# .net ibm-mq xms


【解决方案1】:

我已经找到了一种方法来实现这一点,但不幸的是不是通过代码......

重连超时时间可以在mqclient.ini中设置。

例子:

CHANNELS:
MQReconnectTimeout = 14400

应用此配置后,客户端应用程序应持续重试 4 小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-08
    • 2013-03-28
    • 1970-01-01
    • 2013-12-31
    • 2011-03-04
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多