【发布时间】: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 队列管理器之间是否有防火墙?如果防火墙正在关闭连接,我会问你网络人员。