关闭时设置超时并断开IBM MQ.NET客户端

时间:2018-06-01 13:52:59

标签: c# .net ibm-mq

是否可以为以下代码设置超时时间:

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);

1 个答案:

答案 0 :(得分:0)

MQ客户端和MQ服务器决定TIMEOUT连接的方式基于正在运行的HBINT通道的协商心跳(SVRCONN)值。协商的HBINT始终是SVRCONN与客户端应用程序之间协商的最高值。

注意: SVRCONN HBINT的默认值为300

TIMEOUT以两种方式之一确定:

  1. 如果协商的HBINT小于60,则TIMEOUT为2x HBINT
  2. 如果协商的HBINT大于或等于60,则TIMEOUT为HBINT + 60。
  3. 我在IBM开设了两个PMR,这些PMR在与HBINT相关的.NET客户端领域产生了两个APAR:

    1. 第一个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
      
    2. 第二个APAR IT25065正在解决Managed .NET特有的问题。问题是,对于Managed .NET,客户端HBINT不能低于SVRCONN HBINT。实际上,如果托管.NET的客户端HBINT低于SVRCONN HBINT,则连接将以2059失败。无论是否使用CCDT,此问题都会影响。

      • 使用CCDT,您无法将CLNTCONN HBINT设置为小于SVRCONN HBINT
      • 的值 如果SVRCONN HBINT设置为301或更高,则
      • 没有CCDT会受到影响
        

      IT25065:如果客户端的HBINT小于S​​VRCONN 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
      
    3. 除非您使用包含上述APAR的amqmdnet.dll版本,或者您要求IBM为任何较低版本提供IFIX,否则实现低于300 HBINT的唯一方法是{使用CCDT并将SVRCONN HBINT设置为较低值,将{1}} CLNTCONN与客户端组合设置为较低值。基于非托管或托管.NET,您有两种选择:

      1. 使用非托管.NET,您可以将HBINT CLNTCONN设置为HBINT,并允许客户端始终协商最多1 SVRCONN值。然后,您需要MQ管理员将HBINT SVRCONN设置为所需的值。
      2. 使用Managed .NET,您需要MQ管理员将HBINT SVRCONN设置为所需的值,然后您需要设置CCDT HBINT CLNTCONNHBINT SVRCONN
      3. 的值相同

        如果您正在使用包含上述APAR的HBINT版本,或者您要求IBM为任何较低版本提供IFIX,则以下内容将起作用:

        1. 如果不使用CCDT,则客户端将使用amqmdnet.dll并将协商最多HBINT(1)值。
        2. 如果使用CCDT,则SVRCONN可以将CLNTCONN设置为HBINT,这样会在不使用CCDT时产生与上述相同的行为,1会协商达到HBINT值。
        3. 无论是使用SVRCONN CLNTCONN设置为HBINT的CCDT还是不使用CCDT,其中客户端将使用1,您只需要拥有MQ管理员将HBINT(1) SVRCONN设置为较低的值以完成更短的TIMEOUT。

          在CCDT HBINT频道上设置HBINT的示例:

          CLNTCONN