Как получить уведомление, когда IBM Queue Manager отключается? - PullRequest
1 голос
/ 19 ноября 2009

В настоящее время мы создаем приложение, которое должно взаимодействовать с некоторыми очередями IBM WebSphere. На другом конце очереди есть другой мир. Из-за некоторых неизвестных (для меня обстоятельств) подключение к MQQueueManager каждый раз занимает 17 секунд, но отправка и получение сообщений впоследствии через очереди не является трудоемкой задачей. Поскольку сейчас мы размещаем веб-сервис перед WebSphere, мы пришли к идее декорирования и кэширования MQQueueManager и MQQueues и проверки перед каждой отправкой сообщения, если они подключены, соответственно открыты; если нет, мы пытаемся подключиться к MQQueueManager, соответственно открывая MQQueue (еще раз, подключение к MQQueueManager занимает 17 секунд, открытие MQQueue происходит «мгновенно»). Таким образом, мы ожидаем, что время от времени WebSphere будет отключать MQQueueManager (я не могу сказать наверняка, так как пока мы не можем тщательно это проверить, но мы должны быть осторожны), и незадачливая вызывающая программа будет ждать 17 секунд для повторного подключения. Как сейчас обстоят дела, мы не можем предсказать возникновение этой вещи. Наша текущая реализация использует классы WebSphere MQ для .NET. Есть ли у нас возможность получить уведомление об обратном вызове, когда MQQueueManager отключается или связанные очереди закрываются?

1 Ответ

1 голос
/ 20 ноября 2009

Да! Если вы используете последние классы WMQ .Net и последний IA9H SupportPac , вы получаете метод асинхронного обратного вызова. (Это идет с примером кода .Net, показывающим, как зарегистрироваться и использовать обратный вызов.) Насколько я понимаю, этот метод передаст вашей подпрограмме обратного вызова сообщение, когда оно доступно, или передаст исключение зарегистрированному прослушивателю исключений, если соединение установлено. потеряно или очередь установлена ​​на GET(DISABLED).

Получить последнюю версию клиента WMQ здесь . Ищите SupportPacs с такими именами, как MQC *. Клиент v8.0 - MQC8, клиент v9 - MQC9 и т. Д.

Если у вас более старая версия классов .Net WMQ и по какой-то причине не удается выполнить обновление, вы всегда можете оставить отдельный поток открытым и периодически опрашивать очередь. Не опрашивайте слишком часто. В прошлом я видел, как люди использовали переменную класса в качестве таймера обратного отсчета. Каждый раз, когда сообщение успешно извлекается или помещается в очередь, таймер сбрасывается до максимального значения. Когда таймер достигнет нуля, опросите очередь. Таким образом, вы будете опрашивать очередь только тогда, когда в соединении нет другого трафика.

...