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

IBM MQ имеет функцию автоматического повторного подключения клиента , а время ожидания по умолчанию составляет 30 минут.Через 30 минут он перестает пытаться повторно подключиться ( источник - p35 ).

Я хочу изменить тайм-аут, чтобы он длился дольше (например, 2 часа).Я полагаю, что я могу использовать свойство XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT для этого, потому что оно доступно в классе XMSC.

Тестирование

Я могу смоделировать сбой соединения, заблокировав порт 1414где клиентское приложение устанавливает соединение с IBM MQ.И для целей тестирования я уменьшил значение тайм-аута до 5 минут (вместо 30 минут).

В журнале я вижу, что клиентское приложение получает XMSException с кодом причины 2544 (переподключение):

IBM.XMS.XMSException: MQ delivered an asynchronous event with completion code 1, and reason 2544.
XMSWMQ2014.explanation
XMSWMQ2014.useraction

Linked Exception : CompCode: 1, Reason: 2544

Это происходит в течение 30 минут, и после этого я получаю XMSException с кодом причины 2009 (соединение разорвано).И автоматическое переподключение завершается неудачей.

XMSException occurred: IBM.XMS.XMSException: MQ delivered an asynchronous event with completion code 2, and reason 2009.
XMSWMQ2014.explanation
XMSWMQ2014.useraction

Linked Exception : CompCode: 2, Reason: 2009

Я могу сделать вывод, что изменение значения тайм-аута не имеет никакого эффекта ... Неправильно ли я настраиваю тайм-аут переподключения?

Ниже приведен фрагмент кода:

XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory connectionFactory = factory.CreateConnectionFactory();
connectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "hostname");
connectionFactory.SetIntProperty(XMSC.WMQ_PORT, 1414);
connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, "channel_name");
connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "*");
connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, 300); //300 seconds = 5 minutes

IConnection conn = connectionFactory.CreateConnection();
conn.Start();

Версия клиента IBM MQ: 8.0.0.5

Примечания

1 Ответ

0 голосов
/ 02 января 2019

Я нашел способ сделать это, но, к сожалению, не по коду ...

Тайм-аут переподключения можно установить в mqclient.ini.

Пример:

CHANNELS:
MQReconnectTimeout = 14400

При применении этой конфигурации клиентское приложение должно повторять попытки в течение 4 часов.

...