Frage

habe ich ein Skript eine Reihe von Warteschlangen zu überwachen und, während es perfekt mit Fern Privaten Warteschlangen funktioniert, es funktioniert nicht mit ausgehenden Warteschlangen. Ich machte einen Versuch durch alles, aber das Wesentliche vom Skript zu entfernen, und ich erstellt das folgende Testskript:

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();

Ich lief es dann auf dem Server, und selbst wenn die Warteschlange enthält über tausend Nachrichten, PeekCurrent immer null zurück. Wenn ich MQ_ADMIN_ACCESS entfernen versucht es auf die Remote-Private Warteschlange und es mal aus (wie erwartet, wie es unten Nachrichten lassen kumulieren) zu verbinden. Wenn ich dann die Remote-Private Warteschlange starten, liest die Nachricht richtig von ihm.

Aus Neugier, ich fand heraus, dass info.Open immer nicht gelingt es, den Queue-Namen Materie (das heißt, ob es existiert oder nicht), wenn MQ_ADMIN_ACCESS verwendet wird. Zum Beispiel, tippte ich "DIRECT = OS: Was auch immer \ private $ \ RandomQueueName", und ich habe keine Fehler bekommen

.

Ich bin kein Experte von MSMQ (ganz im Gegenteil), so bin ich wahrscheinlich einen offensichtlichen Fehler zu machen, und ich kann es nicht sehen. Jede Hilfe ist mehr als willkommen. Danke.

Side Frage : ist es möglich, eine Remote-Outgoing Queue zu spähen? Im Moment läuft das Skript auf dem Rechner, auf dem die Outgoing Queue I befindet sich bin Tests, aber es ist nicht der einzige mit dieser Warteschlangen. Ich möchte das Skript überall vermeiden bereitstellen, würde ich es vorziehen, es an einem Ort zu haben. Danke.

War es hilfreich?

Lösung

fand ich die Antworten auf meine beiden Fragen:

  • Die Frage, die ich war, war auf die Tatsache zurückzuführen, die, dass ich versuchte, eine MSMQ-Warteschlange zu überwachen, die als Teil einer Cluster-Ressource-Gruppe ausgeführt wurden, während das Skript unter der aktuellen Konsolensitzung ausgeführt wurde. Um eine Warteschlange in einem Cluster Resource Group zuzugreifen, muss Folgendes getan werden:

    1. Erstellen Sie eine neue Generic Application
    2. Resource innerhalb der Gruppe, wo der MSMQ-Dienst ausgeführt wird, und zeigen Sie es zu Ihrem Script.
    3. In der Konfiguration der neuen Ressource, fügen Sie den MSMQ-Dienst als Abhängigkeit.
    4. Stellen Sie sicher, dass das Kontrollkästchen "Netzwerkname als Computername" ist aktiviert .

Fertig, wird Ihr Skript nun eine Verbindung zu dem MSMQ-Dienst innerhalb der Clustergruppe ausgeführt wird.

  • Outgoing Warteschlangen sind nicht real Warteschlangen, sondern kann als „Liste der Meldungen, gruppiert nach der Queue sie dazu bestimmt sind,“ zu sehen. Daher können sie nicht aus der Ferne überwacht werden. Dies bedeutet, dass sie zu überwachen, die das Script / Anwendung tut es auf jeder Maschine eingesetzt werden muss, und, in einer Cluster-Umgebung, eine Instanz muss in jeder Cluster-Gruppe läuft. Dies fügt einen erheblichen Aufwand, wenn es viele Server, aber es kann durch die Schaffung eines zentralisierten Systems überwunden werden. Große Aufgabe sowieso ...

Ich hoffe, meine Erkenntnisse zu jemandem in der Zukunft nützlich sein werden. :) Zurück zu Pizza backen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top