簡體   English   中英

在關閉和斷開IBM MQ.NET客戶端上設置超時

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

超時是通過以下兩種方法之一確定的:

  1. 如果協商的HBINT小於60,則TIMEOUT是2x HBINT
  2. 如果協商的HBINT大於或等於60,則TIMEOUT為HBINT + 60。

特定於與HBINT相關的.NET客戶端HBINT

APAR IT26614糾正了以下三個問題:

  1. 在非托管或托管模式下,都有文件記錄,如果您不使用CCDT,則HBINT將使用SVRCONN通道的值。 實際上,如果不使用CCDT,則客戶端的HBINT默認為300因此這是您將看到的最低的HBINT

  2. 特定於托管.NET的客戶端HBINT不能低於SVRCONN HBINT ,連接將失敗並顯示HBINT無論是否使用CCDT,此問題都會影響。

    • 使用CCDT時,無法將CLNTCONN HBINT設置為小於SVRCONN HBINT的值
    • 沒有CCDT如果你將受到影響SVRCONN HBINT設置為301或更高
  3. 特定於Managed .NET,客戶端接收超時的計算以毫秒為單位,而不是秒。 在這種情況下,根據IBM長期存在該缺陷,但直到APAR IT16167才發現該缺陷:在8.0.0.10和9.0.0.4中引入了托管的.NET客戶端應用程序不向隊列管理器發送心跳請求 (IBM還確認GA 9.1.0.0中存在此內容)。 以前不是問題的原因是Managed .NET從未啟動過心跳,隊列管理器總是在HB​​INT + 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,您有兩個選擇:

  1. 使用非托管.NET,可以將CLNTCONN HBINT設置為1並允許客戶端始終協商最高SVRCONN HBINT值。 然后,您將需要MQ管理員將SVRCONN HBINT設置為所需的值。
  2. 使用Managed .NET,您需要MQ管理員將SVRCONN HBINT設置為所需的值,然后需要將CCDT CLNTCONN HBINT設置為與SVRCONN HBINT相同的值。

如果您正在使用包含上述APAR的amqmdnet.dll版本,或者要求IBM為您提供任何較低版本的IFIX,則將以下列方式工作:

  1. 如果不使用CCDT,則客戶端將使用HBINT(1)的等效項,並將協商直至SVRCONN值。
  2. 如果使用CCDT,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM