Задание времени ожидания при закрытии и отключении клиента IBM MQ.NET - PullRequest
0 голосов
/ 01 июня 2018

Можно ли установить период ожидания для приведенного ниже кода:

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

1 Ответ

0 голосов
/ 04 июня 2018

Способ, которым клиент MQ и сервер MQ принимают решение ВЫРЕЗАТЬ соединение, основан на согласованном значении сердцебиения (HBINT) для работающего канала SVRCONN.Согласованный HBINT всегда является наивысшим значением, согласованным между SVRCONN и клиентским приложением.

Примечание: SVRCONN HBINT имеет значение по умолчанию 300.

Время ожидания определяется одним из двух способов:

  1. Если согласованное значение HBINT меньше 60, время ожидания равно 2x HBINT.
  2. Еслисогласованный HBINT больше или равен 60, время ожидания равно HBINT + 60.

В зависимости от области клиентов .NET, связанных с HBINT:

APAR IT26614 исправляет следующие три проблемы:

  1. В неуправляемом или управляемом режиме задокументировано, что если вы не используете CCDT, HBINT будет использовать значениеSVRCONN канал.В действительности, если не использовать CCDT, HBINT на стороне клиента по умолчанию будет 300, поэтому это самое низкое значение HBINT, которое вы увидите.

  2. Специально для Managed .NETна стороне клиента HBINT не может быть ниже SVRCONN HBINT, соединение с 2059 не будет установлено. Эта проблема касается как с, так и без CCDT.

    • с CCDT, который вы не можете установитьCLNTCONN HBINT до значения, меньшего SVRCONN HBINT
    • без CCDT, на вас повлияет, если для SVRCONN HBINT установлено значение 301 или выше
  3. Специально для Managed .NET тайм-аут приема на стороне клиента рассчитывался в миллисекундах, а не секундах.В этом случае дефект присутствовал в соответствии с IBM в течение длительного времени, но не появлялся до тех пор, пока APAR IT16167: Управляемое клиентское приложение .NET не отправляет запрос пульса в администратор очередей , представленный в 8.0.0.10и 9.0.0.4 (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

По состоянию на 12 июля 2019 года только 9.0.0.7 и 9.1.3 быливыпущен и может быть загружен из следующих мест:


Если вы не используете версию amqmdnet.dll, которая включает в себя вышеуказанный APAR, или вы не попросите IBM предоставить вам IFIX для любой более низкой версии,единственный способ достичь HBINT ниже 300 потребовал бы, чтобы 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.

Если вы используете версию amqmdnet.dll, который включает в себя вышеуказанный APAR, или вы просите IBM предоставить вам IFIX для любой более низкой версии, как это будет работать:

  1. Если CCDT не используется, клиентская сторона будет использовать эквивалентныйHBINT(1) и будет согласовываться до значения SVRCONN.
  2. При использовании CCDT CLNTCONN может иметь HBINT, установленный на 1, что приведет к тому же поведению, что и выше, когдане используя CCDT, HBINT будет согласовывать до значения SVRCONN.

Независимо от того, используете ли CCDT с CLNTCONN HBINT, установленным на 1, или не используете CCDT, где на стороне клиента будет использоваться HBINT(1), вам нужно будет попросить администратора MQ установить SVRCONN HBINT до более низкого значения для достижения более короткого времени ожидания.


Пример настройки HBINT на канале CCDT CLNTCONN:

DEFINE CHL(CLIENT_CHL) CHLTYPE(CLNTCONN) CONNAME('1.2.3.4(9999)') QMNAME(ABC) HBINT(1)
...