Мы получаем неустойчивую ошибку на ImqQueue::get( ImqMsg &, ImqGetMessageOptions & );
вызов с кодом причины 2042, который не должен происходить ™ на основе документации Websphere; мы должны только получить этот код причины на открытии.
Будет ли эта ошибка указывать, что сервер не удалось открыть очередь на ее стороне, или это указывает на проблему в нашем клиенте? Как лучше всего справиться с этой ошибкой? Прямо сейчас мы просто регистрируем, что это происходит, но это происходит много. К сожалению, я не очень разбираюсь в Websphere MQ; Я как бы подхожу к этому по ходу дела, поэтому у меня не вся терминология правильная.
Наш клиент написан на C ++, ссылается на libmq 6.0.2.4 и работает на SLES-10. Я не знаю подробностей для сервера, кроме того, что он работает под управлением версии 7.1. Мы запрашиваем обновление, чтобы обновить нашу сторону. У нас есть несколько экземпляров клиента, работающего одновременно; все используют одну и ту же очередь запросов, но каждый создает свою собственную очередь динамического ответа с MQOO_INPUT_EXCLUSIVE + MQOO_INPUT_FAIL_IF_QUIESCING
,
Если очередь еще не открыта, метод ImqQueue :: get неявно откроет очередь для вас. В результате будет использована опция MQOO_INPUT_AS_Q_DEF, которая, следовательно, будет использовать атрибут DEFSOPT (EXCL | SHARED) в очереди. Вы должны также дважды проверить, что очередь определена SHARE, а не NOSHARE, но я подозреваю, что она уже будет правильно установлена.
Вы упоминаете, что у вас есть несколько экземпляров приложения, запущенных одновременно, поэтому, если у одного из них очередь неявно открыта как MQOO_INPUT_AS_Q_DEF, что приводит к MQOO_INPUT_SHARED из DEFSOPT, то оно получит 2042 (MQRC_OBJECT_IN_USE), если другие его откроют. Если ничто иное не было открыто в то время, то неявное открытие будет работать, и более поздние экземпляры получат 2042.
Если это прерывисто, то я предлагаю, чтобы через ваше приложение был путь, по которому метод ImqQueue :: open не вызывался. Пока вы ищите это, изменение определения очереди на DEFSOPT (SHARED) должно избавить от 2042-х.