Question

Je créé un script pour surveiller un ensemble de files d'attente, et, alors qu'il fonctionne parfaitement avec Queues privé à distance, il ne fonctionne pas avec Queues sortant. J'ai fait une expérience en enlevant tout, mais l'essentiel du script, et j'ai créé le script de test suivant:

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

Je l'ai alors couru sur le serveur et, même si la file d'attente contient plus d'un millier de messages, PeekCurrent renvoie toujours null. Si je supprime MQ_ADMIN_ACCESS essaie de se connecter à la file d'attente privée à distance et il arrive à expiration (comme prévu, car il est de laisser des messages vers le bas cumulent). Si je commence alors la, il lit la file d'attente privée à distance correctement le message de celui-ci.

Par curiosité, je trouve que info.Open réussit toujours pas d'importance le nom de file d'attente (à savoir si elle existe ou non) lorsque MQ_ADMIN_ACCESS est utilisé. Par exemple, je tapais "DIRECT = OS: Quelle que soit de private $ \ RandomQueueName", et je ne reçois aucune erreur

.

Je ne suis pas un expert de MSMQ (bien au contraire), donc je suis probablement fait une erreur évidente et je ne peux pas le voir. Toute aide est plus que bienvenue. Merci.

question Side : est-il possible de jeter un regard d'une file d'attente à distance sortant? Au moment où le script est en cours d'exécution sur la machine où le test sortant de file d'attente est je trouve, mais ce n'est pas le seul avec ces files d'attente. Je voudrais éviter de déployer partout le script, je préfère avoir en un seul endroit. Merci.

Était-ce utile?

La solution

Je trouve les réponses à mes deux questions:

  • La question que je faisais était dû au fait que j'ai essayé de suivre une file d'attente MSMQ qui était en cours d'exécution dans le cadre d'un groupe de ressources Cluster, tandis que le script a été exécuté sous la session en cours de la console. Pour accéder à une file d'attente à l'intérieur d'un groupe de ressources de cluster, ce qui suit doit être fait:

    1. Créez une nouvelle application générique
    2. des ressources au sein du groupe où le service MSMQ est en cours d'exécution, et le point à votre script.
    3. Dans la configuration de la nouvelle ressource, ajoutez le service MSMQ comme une dépendance.
    4. Assurez-vous que la case à cocher "Utiliser le nom réseau comme nom de l'ordinateur" est coché .

Fait, votre script va maintenant se connecter au service MSMQ en cours d'exécution au sein du groupe Cluster.

  • Queues sortants ne sont pas réels Queues, mais peut être considérée comme une « liste de messages, regroupés par la file d'attente, ils sont destinés à ». Par conséquent, ils ne peuvent pas être contrôlés à distance. Cela signifie que, pour les surveiller, le script / application qui ne il doit être déployé sur chaque machine, et, dans un environnement en cluster, une instance doit fonctionner dans chaque groupe de clusters. Cela ajoute une surcharge importante s'il y a beaucoup de serveurs, mais il peut être surmonté en créant un système centralisé. Grande tâche de toute façon ...

J'espère que mes résultats seront utiles à quelqu'un à l'avenir. :) Retour à la cuisson des pizzas ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top