[英]Setting Timeout on Close and Disconnect IBM MQ.NET Client
是否可以为以下代码设置超时期限:
private MQQueueManager queueManager;
private MQQueue queue;
...
queue.Close();
queueManager.Disconnect();
原因是有时尝试关闭连接时会卡住。 线程在Close()或Disconnect()上阻塞。
更新
客户端使用托管客户端,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服务器决定连接超时的方式基于正在运行的SVRCONN
通道的协商的心跳( HBINT
)值。 协商的HBINT
始终是SVRCONN
与客户端应用程序之间协商的最高值。
注意: SVRCONN
HBINT
的默认值为300
。
超时是通过以下两种方法之一确定的:
HBINT
小于60,则TIMEOUT是2x HBINT
。 HBINT
大于或等于60,则TIMEOUT为HBINT
+ 60。 特定于与HBINT
相关的.NET客户端HBINT
:
APAR IT26614纠正了以下三个问题:
在非托管或托管模式下,都有文件记录,如果您不使用CCDT,则HBINT
将使用SVRCONN
通道的值。 实际上,如果不使用CCDT,则客户端的HBINT
默认为300
因此这是您将看到的最低的HBINT
。
特定于托管.NET的客户端HBINT
不能低于SVRCONN
HBINT
,连接将失败并显示HBINT
无论是否使用CCDT,此问题都会影响。
CLNTCONN
HBINT
设置为小于SVRCONN
HBINT
的值 SVRCONN
HBINT
设置为301
或更高 特定于Managed .NET,客户端接收超时的计算以毫秒为单位,而不是秒。 在这种情况下,根据IBM长期存在该缺陷,但直到APAR IT16167才发现该缺陷:在8.0.0.10和9.0.0.4中引入了托管的.NET客户端应用程序不向队列管理器发送心跳请求 (IBM还确认GA 9.1.0.0中存在此内容)。 以前不是问题的原因是Managed .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已发布,可以从以下位置下载:
除非您使用包含上述APAR的amqmdnet.dll
版本,或者您要求IBM为任何较低版本提供IFIX,否则,实现低于300 HBINT的唯一方法是将SVRCONN
HBINT
设置为结合使用使用CCDT并将CLNTCONN
HBINT
设置为较低值的客户端的较低值。 基于非托管或托管.NET,您有两个选择:
CLNTCONN
HBINT
设置为1
并允许客户端始终协商最高SVRCONN
HBINT
值。 然后,您将需要MQ管理员将SVRCONN
HBINT
设置为所需的值。 SVRCONN
HBINT
设置为所需的值,然后需要将CCDT CLNTCONN
HBINT
设置为与SVRCONN
HBINT
相同的值。 如果您正在使用包含上述APAR的amqmdnet.dll
版本,或者要求IBM为您提供任何较低版本的IFIX,则将以下列方式工作:
HBINT(1)
的等效项,并将协商直至SVRCONN
值。 CLNTCONN
可以将HBINT
设置为1
,这将导致不使用CCDT时具有与上述相同的行为, HBINT
将协商达到SVRCONN
值。 无论是使用CLNTCONN
HBINT
设置为1
的CCDT还是不使用客户端将使用HBINT(1)
的CCDT,您都需要让MQ管理员将SVRCONN
HBINT
设置为一个较小的值,以缩短超时时间。
在CCDT CLNTCONN
通道上设置HBINT
示例:
DEFINE CHL(CLIENT_CHL) CHLTYPE(CLNTCONN) CONNAME('1.2.3.4(9999)') QMNAME(ABC) HBINT(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.