Да! Если вы используете последние классы WMQ .Net и последний IA9H SupportPac , вы получаете метод асинхронного обратного вызова. (Это идет с примером кода .Net, показывающим, как зарегистрироваться и использовать обратный вызов.) Насколько я понимаю, этот метод передаст вашей подпрограмме обратного вызова сообщение, когда оно доступно, или передаст исключение зарегистрированному прослушивателю исключений, если соединение установлено. потеряно или очередь установлена на GET(DISABLED)
.
Получить последнюю версию клиента WMQ здесь . Ищите SupportPacs с такими именами, как MQC *. Клиент v8.0 - MQC8, клиент v9 - MQC9 и т. Д.
Если у вас более старая версия классов .Net WMQ и по какой-то причине не удается выполнить обновление, вы всегда можете оставить отдельный поток открытым и периодически опрашивать очередь. Не опрашивайте слишком часто. В прошлом я видел, как люди использовали переменную класса в качестве таймера обратного отсчета. Каждый раз, когда сообщение успешно извлекается или помещается в очередь, таймер сбрасывается до максимального значения. Когда таймер достигнет нуля, опросите очередь. Таким образом, вы будете опрашивать очередь только тогда, когда в соединении нет другого трафика.