Domanda

Ho creato uno script per monitorare una serie di code, e, mentre funziona perfettamente con Remote Code private, non funziona con uscita code. Ho fatto un esperimento cancellando tutto tranne l'essenziale dal copione, e ho creato il seguente script di test:

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

Allora ho fatto funzionare sul server e, anche se la coda contiene più di mille messaggi, PeekCurrent restituisce sempre null. Se rimuovo MQ_ADMIN_ACCESS tenta di collegarsi ai tempi remoti coda privata e fuori (come previsto, come si è scesi a lasciare messaggi accumulano). Se poi avviare la coda privata remota, si legge il messaggio correttamente da esso.

Per curiosità, ho scoperto che info.Open sempre non riesce importa il nome della coda (vale a dire se esiste o meno) quando si utilizza MQ_ADMIN_ACCESS. Per esempio, ho digitato "DIRECT = OS: Qualunque cosa \ private $ \ RandomQueueName", e non ho avuto alcun errore

.

Io non sono un esperto di MSMQ (tutto il contrario), quindi sono probabilmente facendo un errore evidente e non riesco a vederlo. Ogni aiuto è più che benvenuto. Grazie.

questione laterale : è possibile sbirciare una coda in uscita a distanza? Al momento lo script è in esecuzione sulla macchina in cui l'uscita di coda sto testando si trova, ma non è l'unico con queste code. Mi piacerebbe evitare di distribuire lo script ovunque, preferirei avere in un unico luogo. Grazie.

È stato utile?

Soluzione

ho trovato le risposte a entrambe le mie domande:

  • Il problema che stavo avendo era dovuto al fatto che ho cercato di monitorare una coda MSMQ che è stato eseguito come parte di un gruppo di risorse cluster, mentre lo script è stato eseguito con l'attuale sessione della console. Per accedere a una coda all'interno di un gruppo di risorse cluster, deve essere fatto quanto segue:

    1. Creare una nuova applicazione generica
    2. delle risorse all'interno del Gruppo in cui il servizio MSMQ è in esecuzione, e punto al vostro script.
    3. Nella configurazione della nuova risorsa, aggiungere il servizio MSMQ come una dipendenza.
    4. Verificare che la casella di controllo "Usa nome di rete come nome del computer" è controllare .

Fatto, lo script sarà ora connettersi al servizio MSMQ in esecuzione all'interno del Gruppo cluster.

  • code in uscita non sono vere e proprie code, ma può essere visto come un "elenco dei messaggi, raggruppati per la coda a cui sono destinati". Pertanto, non possono essere controllati a distanza. Ciò significa che, per monitorare loro, lo script / applicazione che fa deve essere distribuito su ogni macchina, e, in un ambiente cluster, un'istanza devono funzionare in ogni gruppo cluster. Questo aggiunge un overhead significativo se ci sono molti server, ma può essere superato con la creazione di un sistema centralizzato. Grande compito in ogni caso ...

Spero che i miei risultati saranno utili a qualcuno in futuro. :) Torna alla cottura della pizza ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top