是否可以为以下代码设置超时时间:
private MQQueueManager queueManager;
private MQQueue queue;
...
queue.Close();
queueManager.Disconnect();
原因是有时连接卡住试图关闭。线程在Close()或Disconnect()上被阻塞。
更新
客户端使用托管客户端,CCDT文件,群集队列管理器以及可能导致不同设置的其他功能。
请提供代码示例。
由于@JoshMc建议下面的链接具有相同的答案,一旦解决此故障单将关闭。 Setting timeout on Commit() and Backout() IBM MQ.NET Client
更新2
我们可以通过类似的方法通过以下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);
答案 0 :(得分:0)
MQ客户端和MQ服务器决定TIMEOUT连接的方式基于正在运行的HBINT
通道的协商心跳(SVRCONN
)值。协商的HBINT
始终是SVRCONN
与客户端应用程序之间协商的最高值。
注意: SVRCONN
HBINT
的默认值为300
。
TIMEOUT以两种方式之一确定:
HBINT
小于60,则TIMEOUT为2x HBINT
。HBINT
大于或等于60,则TIMEOUT为HBINT
+ 60。我在IBM开设了两个PMR,这些PMR在与HBINT
相关的.NET客户端领域产生了两个APAR:
第一个APAR IT25064正在处理非托管或托管模式,如果您未使用CCDT,HBINT
将使用SVRCONN
的值渠道。实际上,如果不使用CCDT,客户端的HBINT
默认为300
,因此这是您可以获得的最低HBINT
,这导致至少360秒(6分钟)TIMEOUT
IT25064:IBM MQ .NET客户端不支持SVRCONN通道定义上的心跳间隔(HBINT)
The fix is targeted for delivery in the following PTFs: Version Maintenance Level v7.5 7.5.0.9 v8.0 8.0.0.11 v9.0 LTS 9.0.0.5
第二个APAR IT25065正在解决Managed .NET特有的问题。问题是,对于Managed .NET,客户端HBINT
不能低于SVRCONN
HBINT
。实际上,如果托管.NET的客户端HBINT
低于SVRCONN
HBINT
,则连接将以2059失败。无论是否使用CCDT,此问题都会影响。
CLNTCONN
HBINT
设置为小于SVRCONN
HBINT
SVRCONN
HBINT
设置为301
或更高,则IT25065:如果客户端的HBINT小于SVRCONN HBINT,则IBM MQ .NET客户端连接失败
The fix is targeted for delivery in the following PTFs: Version Maintenance Level v7.5 7.5.0.9 v8.0 8.0.0.11 v9.0 LTS 9.0.0.5
除非您使用包含上述APAR的amqmdnet.dll
版本,或者您要求IBM为任何较低版本提供IFIX,否则实现低于300 HBINT的唯一方法是{使用CCDT并将SVRCONN
HBINT
设置为较低值,将{1}} CLNTCONN
与客户端组合设置为较低值。基于非托管或托管.NET,您有两种选择:
HBINT
CLNTCONN
设置为HBINT
,并允许客户端始终协商最多1
SVRCONN
值。然后,您需要MQ管理员将HBINT
SVRCONN
设置为所需的值。HBINT
SVRCONN
设置为所需的值,然后您需要设置CCDT HBINT
CLNTCONN
与HBINT
SVRCONN
。如果您正在使用包含上述APAR的HBINT
版本,或者您要求IBM为任何较低版本提供IFIX,则以下内容将起作用:
amqmdnet.dll
并将协商最多HBINT(1)
值。SVRCONN
可以将CLNTCONN
设置为HBINT
,这样会在不使用CCDT时产生与上述相同的行为,1
会协商达到HBINT
值。无论是使用SVRCONN
CLNTCONN
设置为HBINT
的CCDT还是不使用CCDT,其中客户端将使用1
,您只需要拥有MQ管理员将HBINT(1)
SVRCONN
设置为较低的值以完成更短的TIMEOUT。
在CCDT HBINT
频道上设置HBINT
的示例:
CLNTCONN