Просмотр исходящей очереди MSMQ с помощью JScript - PullRequest
0 голосов
/ 09 августа 2010

Я создал скрипт для мониторинга набора очередей, и, хотя он отлично работает с удаленными частными очередями, он не работает с исходящими очередями. Я провел эксперимент, удалив из скрипта все, кроме существенного, и создал следующий тестовый скрипт:

var info = new ActiveXObject("MSMQ.MSMQQueueInfo");
info.FormatName = /*<Queue name>*/;

// 0x80 = MQ_ADMIN_ACCESS
// 0x20 = MQ_PEEK_ACCESS
// 0x00 = MQ_DENY NONE
var mq = info.Open(0x80 | 0x20, 0x00);

var msg = mq.PeekCurrent(false, true, 0); 
if (msg != null) {
    WScript.echo("message found");  
}
else
{
    WScript.echo("Nothing");
}
mq.close();

Затем я запустил его на сервере и, даже если очередь содержит более тысячи сообщений, PeekCurrent всегда возвращает ноль. Если я удаляю MQ_ADMIN_ACCESS, он пытается подключиться к удаленной частной очереди, и время ожидания истекает (как и ожидалось, так как он не работает, чтобы сообщения накапливались). Если я затем запусту Удаленную частную очередь, она правильно прочитает из нее сообщение.

Из любопытства я обнаружил, что info.Open всегда успешно выполняется независимо от имени очереди (то есть, существует ли оно или нет), когда используется MQ_ADMIN_ACCESS. Например, я набрал «DIRECT = OS: Wh независимо \ private $ \ RandomQueueName», и я не получил никакой ошибки.

Я не эксперт MSMQ (как раз наоборот), поэтому я, вероятно, совершаю очевидную ошибку и не вижу ее. Любая помощь приветствуется. Спасибо.

Дополнительный вопрос : возможно ли просмотреть удаленную исходящую очередь? На данный момент скрипт выполняется на машине, где находится исходящая очередь, которую я тестирую, но не только с этими очередями. Я хотел бы избежать развертывания сценария везде, я бы хотел, чтобы он был в одном месте. Спасибо.

1 Ответ

0 голосов
/ 15 февраля 2011

Я нашел ответы на оба моих вопроса:

  • Проблема, с которой я столкнулся, была связана с тем, что я пытался отслеживать очередь MSMQ, которая работала как часть кластераРесурсная группа, в то время как скрипт выполнялся под текущим сеансом консоли.Чтобы получить доступ к очереди внутри группы ресурсов кластера, необходимо сделать следующее:

    1. Создать новое универсальное приложение
    2. Ресурс внутри группы, в которой работает служба MSMQ, и указать еек вашему сценарию.
    3. В конфигурации нового ресурса добавьте службу MSMQ в качестве зависимости.
    4. Убедитесь, что флажок «Использовать имя сети в качестве имени компьютера» установлен на .

Готово, ваш скрипт теперь подключится к службе MSMQ, работающей внутри кластерной группы.

  • Исходящие очереди не реальныОчереди, но могут рассматриваться как «список сообщений, сгруппированных по Очереди, которому они предназначены».Поэтому их нельзя контролировать удаленно.Это означает, что для их мониторинга необходимо развернуть сценарий / приложение, которое его выполняет, на каждой машине, а в кластерной среде экземпляр должен запускаться в каждой кластерной группе.Это добавляет значительные накладные расходы, если имеется много серверов, но это можно преодолеть путем создания централизованной системы.В любом случае, большая задача ...

Я надеюсь, что мои выводы пригодятся кому-нибудь в будущем.:) Вернуться к выпечке пиццы ...

...