是否可以为以下代码设置超时期限:
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服务器决定连接超时的方式基于正在运行的HBINT
通道的协商的心跳(SVRCONN
)值。协商的HBINT
始终是SVRCONN
与客户端应用程序之间协商的最高值。
注意:SVRCONN
HBINT
的默认值为300
。
超时是通过以下两种方法之一确定的:
如果协商的HBINT
小于60,则TIMEOUT是2x HBINT
。
如果协商的HBINT
大于或等于60,则TIMEOUT为HBINT
+ 60。
特定于与HBINT
相关的.NET客户端领域:
APAR IT26614纠正了以下三个问题:
在非托管或托管模式下,都有文件记录,如果您不使用CCDT,则HBINT
将使用SVRCONN
通道的值。实际上,如果不使用CCDT,则客户端的HBINT
默认为300
,因此这是您将看到的最低的HBINT
。
特定于受管.NET的客户端HBINT
不能低于SVRCONN
HBINT
,连接将在2059年失败。无论是否使用CCDT,此问题都会影响。
使用CCDT时,无法将CLNTCONN
HBINT
设置为小于SVRCONN
HBINT
的值
没有CCDT的情况,如果SVRCONN
HBINT
设置为301
或更高,将会受到影响
特定于Managed .NET,客户端接收超时的计算以毫秒为单位,而不是秒。在这种情况下,根据IBM长期存在该缺陷,但直到8.0.0.10和9.0.0.4中引入APAR IT16167: Managed .NET client application does not send heartbeat request to queue manager时才出现该缺陷(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已发布,可以从以下位置下载:
9.0.0.7 MQC9: IBM MQ V9 Clients
9.1.3 MQC91: IBM MQC91: IBM MQ Clients
除非您使用包含上述APAR的
amqmdnet.dll
版本,或者您要求IBM为任何较低版本提供IFIX,否则要实现低于300 HBINT的唯一方法是需要SVRCONN
HBINT
CLNTCONN
HBINT
设置为较低值的CCDT与客户端一起将其设置为较低的值。基于非托管或托管.NET,您有两个选择:使用非托管.NET,可以将
CLNTCONN
HBINT
设置为1
,并允许客户端始终协商最多SVRCONN
HBINT
值。然后,您将需要MQ管理员将SVRCONN
HBINT
设置为所需的值。使用Managed .NET,您需要MQ管理员将
SVRCONN
HBINT
设置为所需的值,然后将CCDT CLNTCONN
HBINT
设置为与SVRCONN
。如果您正在使用包含上述APAR的
HBINT
版本,或者您要求IBM为任何较低版本提供IFIX,则以下内容将起作用:如果不使用CCDT,则客户端将使用等价的
amqmdnet.dll
,并将协商最多HBINT(1)
的值。如果使用CCDT,则
SVRCONN
可以将CLNTCONN
设置为HBINT
,这将导致不使用CCDT时具有与上述相同的行为,1
将协商最多HBINT
值。无论是使用
SVRCONN
CLNTCONN
设置为HBINT
的CCDT还是不使用客户端使用1
的CCDT,您都需要让MQ管理员将HBINT(1)
SVRCONN
设置为较低的值可实现更短的超时。在CCDT
HBINT
通道上设置HBINT
的示例:DEFINE CHL(CLIENT_CHL) CHLTYPE(CLNTCONN) CONNAME('1.2.3.4(9999)') QMNAME(ABC) HBINT(1)
关于c# - 在关闭和断开IBM MQ.NET客户端上设置超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50644990/