【问题标题】:IBM MQ Client disconnect after 10 minutes: IBM.XMS.IllegalStateExceptionIBM MQ 客户端在 10 分钟后断开连接:IBM.XMS.IllegalStateException
【发布时间】:2019-07-08 14:34:19
【问题描述】:

我正在使用 IBM 的这个示例。我刚刚复制并粘贴了代码:

https://github.com/ibm-messaging/mq-dev-patterns/blob/master/dotnet/dotNetGet.cs

  • 我正在连接到 MQ 服务器版本 9.0.0.5
  • 我正在使用控制台应用程序 .Net Framework 4.6.1
  • 我本地机器上安装的 MQ 客户端是 9.1.0.1

我可以看到一个非常奇怪的行为。应用程序正常运行并且能够获取消息。但它会在整整 10 分钟后断开连接。总是 10 分钟。

这是捕获的错误:

IBM.XMS.IllegalStateException: Failed to get a message from destination MY_QUEUE.
IBM MQ classes for XMS attempted to perform an MQGET; however IBM MQ reported an error.
Use the linked exception to determine the cause of this error.
   at IBM.XMS.Client.Impl.XmsMessageConsumerImpl.ReceiveInboundMessage(Int64 timeout)
   at IBM.XMS.Client.Impl.XmsMessageConsumerImpl.Receive(Int64 millis)
   at Mq_Get_Tests.SimpleConsumer.ReceiveMessages() in C:\Users\osotorrio\Projects\Temporal\Mq_Get_Tests\Mq_Get_Tests\SimpleConsumer.cs:line 137
Linked Exception : CompCode: 2, Reason: 2009*

IBM 示例是否缺少一些配置设置以允许客户端在 10 分钟不活动后重新连接?

【问题讨论】:

  • 您在队列管理器错误日志中看到的错误是什么
  • 您能确认您是在托管模式下调用它吗? (提供*SYSTEM*USER 作为密钥库?
  • @JoshMc 密钥存储库的值是“*SYSTEM”。因此,按照示例,属性“XMSC_WMQ_CONNECTION_MODE”设置为 WMQ_CM_CLIENT = 1
  • 示例代码在消息循环之外捕获异常。如果要在链接的异常为 2009 时重新连接,则需要在循环内捕获异常,检查它是否为 2009 - MQRC_CONNECTION_BROKEN - 并重新连接。连接中断的原因有很多,很可能与网络或防火墙有关。
  • 您和 MQ 队列管理器之间是否有防火墙?如果防火墙正在关闭连接,我会问你网络人员。

标签: .net ibm-mq


【解决方案1】:

您描述的症状似乎与 APAR IT26614: MQ dotnet (.NET) client channel ends abnormally when the heartbeat (HBINT) is reached 匹配。

The fix is targeted for delivery in the following PTFs:

Version    Maintenance Level
v8.0       8.0.0.13
v9.0 LTS   9.0.0.7
v9.1 CD    9.1.3
v9.1 LTS   9.1.0.3

截至 2019 年 8 月 7 日,9.0.0.7 和 9.1.0.3 已发布,可从 MQC9: IBM MQ V9 ClientsMQC91: IBM MQ Clients 下载


提供一些关于事情应该如何工作的背景:

  1. MQ 客户端应用程序在连接到队列管理器时将协商一个心跳间隔 (HBINT),它是一个以秒为单位的值。协商的HBINT 始终是SVRCONN 和客户端应用程序之间协商的最高值。
    注意:SVRCONNHBINT 的默认值为300
  2. 基于HBINT,TIMEOUT 通过以下两种方式之一计算:
    1. 如果协商的 HBINT 小于 60,则 TIMEOUT 为 2x HBINT。 (收到的超时是 HBINT 过去后的 HBINT 秒)
    2. 如果协商的HBINT 大于或等于60,则TIMEOUT 为HBINT + 60。(接收超时为HBINT 过去后的60 秒)。
  3. 如果在HBINT 时间内没有从队列管理器接收到正常流量,则客户端应向应响应的队列管理器发送心跳。客户端应等待接收超时时间以接收心跳。
  4. 队列管理器也可以向客户端发起心跳,但为了防止额外的流量,队列管理器在向客户端发送心跳之前等待比协商的 HBINT 多 5 秒。

APAR IT26614 更正了以下三个问题:

  1. 在非托管或托管模式下,据记录,如果您不使用 CCDT,HBINT 将使用 SVRCONN 通道的值。实际上,如果不使用 CCDT,客户端的 HBINT 默认为 300,因此这是您将看到的最低 HBINT

  2. 特定于托管 .NET,客户端 HBINT 不能低于 SVRCONN HBINT 连接将失败并返回 2059。此问题影响有无 CCDT。

    • 使用 CCDT,您无法将 CLNTCONN HBINT 设置为小于 SVRCONN HBINT 的值
    • 如果没有 CCDT,如果 SVRCONN HBINT 设置为 301 或更高,您将受到影响
  3. 特定于托管 .NET,客户端接收超时的计算单位是毫秒而不是秒。在这种情况下,根据 IBM 的说法,该缺陷已存在很长时间,但直到 APAR IT16167: Managed .NET client application does not send heartbeat request to queue manager 在 8.0.0.10 和 9.0.0.4 中引入(IBM 还确认这在 GA 9.1.0.0 中存在)才出现。以前不是问题的原因是托管 .NET 从未启动心跳,队列管理器总是会在 HBINT + 5 秒时发送心跳,并且 .NET 客户端会响应。纠正此问题后,就会出现接收超时的错误计算。


基于托管 XMS.NET 客户端版本 9.1.0.1,这是我怀疑正在发生的事情:

  1. 无论 SVRCONN HBINT 设置了什么,HBINT 都会协商为 300 秒。
  2. 托管 XMS.NET 客户端将在 300 秒内未从队列管理器收到任何消息后向队列管理器发送心跳。
  3. 此时,托管 XMS.NET 客户端将仅等待 60 毫秒以等待来自队列管理器的响应。
  4. 如果托管 XMS.NET 客户端在 60 毫秒内未收到响应,它将向应用程序返回 2009 错误。
  5. 队列管理器错误日志将显示 AMQ9209,并显示“通过 TCP/IP 从 'dnsname (xx.xx.xx.xx)' 接收数据时发生错误。

您提到仅在 10 分钟(600 秒)时看到它,但根据网络的延迟,我在任何 300 秒间隔看到它。如果您要连接到同一服务器或同一本地网段中的队列管理器,您可能永远不会看到此问题。如果您通过高延迟 WAN 电路进行连接,则可能每 300 秒就会遇到一次。如果您通过接近 30 毫秒的网段连接,您可能会间歇性地看到它。

我建议您试用 9.0.0.7 或 9.1.0.3 托管 XMS.NET 客户端,看看它是否可以为您解决问题,因为在这些版本中,它将等待整整 60 秒等待队列管理器的心跳响应.


如果您想在不使用包含 APAR IT26614 的 MQ 版本的情况下向示例添加重新连接以掩盖问题,您可以使用以下设置:

cf.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT);
cf.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
//Note that XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT is 1800

请注意,即使您使用带有 APAR IT26614 的 MQ 版本,上述做法也是一个很好的做法,因为如果连接正常,它将告诉托管 XMS.NET 客户端自动尝试重新连接到队列管理器 XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT 秒丢失的。重新连接不适用于与队列管理器的初始连接,它仅在您连接后才适用。

【讨论】:

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