Как автоматически подключить клиент IBM MQ?

Я использую классы MQ.NET клиента MQ 7x, и импорт и экспорт сообщений работают нормально. Однако при отключении сети или отключении удаленного менеджера клиент IBM MQ не выполняет повторное подключение автоматически. Я получил:

Error: Remote host ' not available, retry later.   

Есть ли способ автоматического подключения и продолжения обработки сообщения при возникновении подобных проблем?

Есть свойство проверять подключение администратора очередей:

mqQMgr = new MQQueueManager("My queue manager name" ,"my channel name",",my connection name");

mqQMgr.IsConnected возвращает true/false, но это не помогает автоподключению.

Это то, что я использую:

   // mq properties
    Hashtable properties = new Hashtable();
    properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);            
    properties.Add(MQC.CONNECTION_NAME_PROPERTY, "connectionName");            
    properties.Add(MQC.CHANNEL_PROPERTY, "channelName");
    properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);

    mqQMgr = new MQQueueManager("my queue manager"), properties); //error thrown

Я получаю эту ошибку в строке выше

IBM MQException caught in send message - reason code - 2046- message -CompCode: 2, Reason: 2046
{"MQRC_OPTIONS_ERROR"}
base {System.ApplicationException}:
{"MQRC_OPTIONS_ERROR"}
CompCode: 2
CompletionCode: 2
Message: "MQRC_OPTIONS_ERROR"
Reason: 2046

person Sharpeye500    schedule 05.04.2013    source источник


Ответы (2)


Автоматическое повторное подключение клиента поддерживается клиентом MQ C#, начиная с версии 7.1. Вы должны использовать опцию MQCNO_RECONNECT или MQCNO_RECONNECT_Q_MGR или MQCNO_RECONNECT_AS_DEF CNO, чтобы включить автоматическое переподключение. MQ v7.1 поставляет несколько образцов, SimpleClientAutoReconnectPut.cs — один из них. Подробности смотрите в образце.

Простой фрагмент.

mqQMgr = new MQQueueManager("QM", MQC.MQCNO_RECONNECT,"SVRCONNCHN","localhost(1414)");
person Shashi    schedule 06.04.2013
comment
Я использую код для подключения того же диспетчера очередей, MQCNO_RECONNECT_Q_MGR, и получаю сообщение об ошибке — код причины 2046. Я использую клиент 7x и подключаюсь к удаленной очереди (6.0.5.2) - person Sharpeye500; 08.04.2013
comment
Ах! Это проблема. Для автоматического переподключения клиента требуется администратор очередей версии 7.0 или выше. Это не работает с v6.0.x. - person Shashi; 09.04.2013
comment
Для меня даже с версией клиента 7.5.0.5 моя клиентская программа на Java не переподключается, даже если я прохожу ниже. Всегда происходит сбой с ошибкой 2009 qMgr = new MQQueueManager(queueMgr, MQConstants.MQCNO_RECONNECT); - person sijo0703; 27.07.2016
comment
Ваш администратор очередей должен быть версии 7.0.1 или выше. Это также зависит от того, как теряется соединение с администратором очередей. Если вы отключили администратор очередей с помощью команды endmqm без опции -r или -s, то клиентское приложение не будет повторно подключаться. Пожалуйста, прочитайте Центр знаний. - person Shashi; 27.07.2016

Я использовал это некоторое время назад, но были варианты для автоматического переподключения: здесь вы можете прочитать немного больше, хотя это адаптировано для Java, параметры также доступны в оболочке C#: IBM MQ: автоматическое переподключение клиента

Хороший шаблон перед тем, как написать сообщение, проверить, подключено ли оно и переподключиться:

if (!mqQMgr.IsConnected) {
   mqQMgr.Connect();
}
mqQMgr.Write(message);

Я не знаю, поможет ли это вам. Удачи!

person Stas    schedule 05.04.2013
comment
Я не верю, что это сработает. Согласно документации: Любые вызовы IsConnected не пытаются активно связаться с диспетчером очередей, поэтому возможно, что физическое соединение может быть нарушено, но IsConnected все еще может возвращать значение true. Состояние IsConnected обновляется только тогда, когда действие, например размещение сообщения, получение сообщения, выполняется в администраторе очередей. ibm.com/support/knowledgecenter/en/SSFKSJ_7.5.0/ - person Ykok; 23.08.2019