是否可以为以下代码设置超时时间:
private MQQueueManager queueManager;
private MQQueue queue;
...
queue.Close();
queueManager.Disconnect();
原因是有时连接在尝试关闭时会卡住。线程在 Close() 或 Disconnect() 上阻塞。
Update
客户端使用托管客户端、CCDT 文件、集群队列管理器和其他可能导致不同设置的功能。
请提供代码示例。
我们可以通过 API 使用类似的方法更改超时设置吗,如下所示:
int openOptions = Set possible settings here
var properties = new Hashtable
{
Set possible settings here
};
_queueManager = new MQQueueManager(_queueManagerName, properties);
_queue = _queueManager.AccessQueue(QUEUE_NAME, openOptions);
MQ 客户端和 MQ 服务器决定连接超时的方式基于协商的心跳(HBINT
) 运行值SVRCONN
渠道。经协商的HBINT
始终是双方协商的最高值SVRCONN
和客户端应用程序。
Note: SVRCONN
HBINT
有一个默认值300
.
超时通过以下两种方式之一确定:
- 如果协商的
HBINT
小于 60 超时为 2xHBINT
.
- 如果协商的
HBINT
大于或等于 60 则 TIMEOUT 为HBINT
+ 60.
特定于 .NET 客户端相关领域HBINT
:
APAR IT26614 纠正了以下三个问题:
在非托管或托管模式下,记录表明,如果您不使用 CCDT,HBINT
将使用的值SVRCONN
渠道。实际上,如果不使用 CCDTHBINT
在客户端默认为300
所以这是最低的HBINT
你会看见。
-
特定于托管 .NET 客户端HBINT
不能低于SVRCONN
HBINT
连接将失败并显示 2059。此问题无论是否有 CCDT 都会产生影响。
- 使用 CCDT,您无法设置
CLNTCONN
HBINT
的值小于SVRCONN
HBINT
- 如果没有 CCDT,您将会受到影响
SVRCONN
HBINT
被设定为301
或更高
特定于托管.NET,客户端接收超时以毫秒而不是秒为单位计算。在这种情况下,根据 IBM 的说法,该缺陷已经存在很长时间了,但直到 APAR 才出现IT16167:托管 .NET 客户端应用程序不向队列管理器发送检测信号请求在 8.0.0.10 和 9.0.0.4 中引入(IBM 也确认它存在于 GA 9.1.0.0 中)。以前这不是问题的原因是托管 .NET 从未启动心跳,队列管理器始终会在 HBINT + 5 秒发送心跳,并且 .NET 客户端会响应。一旦纠正了这个问题,接收超时的错误计算就出现了。
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 年 7 月 12 日,仅发布了 9.0.0.7 和 9.1.3,可以从以下位置下载:
- 9.0.0.7 MQC9:IBM MQ V9 客户端
- 9.1.3 MQC91:IBM MQC91:IBM MQ 客户端
除非您使用的是amqmdnet.dll
其中包括上述 APAR,或者您要求 IBM 为您提供任何较低版本的 IFIX,实现低于 300 HBINT 的唯一方法将需要SVRCONN
HBINT
与使用 CCDT 的客户端结合设置为较低的值CLNTCONN
HBINT
设置为较低的值。基于非托管或托管 .NET,您有两种选择:
- 使用非托管 .NET,您可以设置
CLNTCONN
HBINT
to 1
并允许客户始终协商SVRCONN
HBINT
价值。然后,您需要 MQ 管理员来设置SVRCONN
HBINT
到所需的值。
- 使用托管 .NET,您需要 MQ 管理员来设置
SVRCONN
HBINT
到所需的值,然后您需要设置 CCDTCLNTCONN
HBINT
与相同的值SVRCONN
HBINT
.
如果您使用的是amqmdnet.dll
其中包括上述 APAR,或者您要求 IBM 为您提供任何较低版本的 IFIX,工作原理如下:
- 如果不使用 CCDT,客户端将使用等效的
HBINT(1)
并将谈判直至SVRCONN
value.
- 如果使用 CCDT
CLNTCONN
可以有HBINT
set to 1
当不使用 CCDT 时,这会导致与上面相同的行为,HBINT
将协商直至SVRCONN
value.
无论是否使用 CCDTCLNTCONN
HBINT
set to 1
或者不使用客户端将使用的 CCDTHBINT(1)
,您需要请求 MQ 管理员来设置SVRCONN
HBINT
为较低的值以实现较短的超时。
设置示例HBINT
关于 CCDTCLNTCONN
渠道:
DEFINE CHL(CLIENT_CHL) CHLTYPE(CLNTCONN) CONNAME('1.2.3.4(9999)') QMNAME(ABC) HBINT(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)