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
Примечания