[英]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.