Websphere MQ не работает асинхронный

У нас есть приложение, использующее Websphere MQ v.7.0.1. Сервер работает под Linux, клиентское приложение работает на Windows 7 и написано на Java с использованием классов MQ для java. Одна из очередей между клиентом и сервером предназначена исключительно для протокола keepalive между клиентом и сервером. По ряду причин, в которые мы не должны вдаваться, это необходимо для поддержания соединений с "реальным бэкэндом", частью которого является сервер MQ.

Протокол Keepalive работает достаточно хорошо, за исключением случая, когда один из серверов выходит из строя и клиенты должны повторно подключиться к нему, когда он станет доступным. Тогда у нас проблемы.

Мы решили, что наша реализация протокола keepalive слишком сложна. Клиенту нужно только отправлять эти сообщения поддержки активности на сервер через регулярные промежутки времени и не нужно заботиться о том, достигают они сервера или нет. Если они этого не сделают, сервер примет
соответствующее действие.

Поэтому асинхронный пут напрашивается сам собой. Наша первая попытка реализовать это было следующим:

из этого:

MQPutMessageOptions pmo = new MQPutMessageOptions();  // accept the defaults
QueueKL.put(mqMessage,pmo);                                             

к этому:

MQPutMessageOptions pmo = new MQPutMessageOptions();                    
pmo.options |= CMQC.MQPMO_ASYNC_RESPONSE;                               
QueueKL.put(mqMessage,pmo); 

Результаты оказались неприятным сюрпризом. Вместо немедленного возврата вызов put никогда не возвращается, и поток, из которого он был вызван, никогда не показывает другого признака жизни.

Конечно, этот вызов запускается в блоке try-catch, и мы попытались в крайнем случае перехватить любой возможный Throwable, который может быть брошен, т.е. catch (Throwable t) и войдите. Ничего подобного не зарегистрировано. Похоже, что на этом этапе поток заблокирован, что полностью противоположно тому, что я ожидал.

Я должен упустить что-то критическое в том, как я реализую это
звоните, (требуются ли какие-то особые настройки в Queue или QueueManager? Документы IBM здесь крайне обострены), но я не знаю, что это такое. Пожалуйста, помогите мне разобраться в этом.

1 ответ

Решение

Это помогает? У вас случайно нет 7.0.1.8?

http://www-01.ibm.com/support/docview.wss?uid=swg1IC85084

"Эта проблема также затрагивает пользователей классов WebSphere MQ для Java, которые помещают сообщения в очередь WebSphere MQ с указанием MQPMO_ASYNC_RESPONSE в структуре параметров сообщения PUT (MQPMO)".

Попробуйте убедиться, что на стороне клиента 7.0.1.9 или 7.1.0.2 или выше

Другие вопросы по тегам