Délai d'attente de la méthode MSMQ Receive ()

Ma question d'origine d'un certain temps, il est MSMQ Lente de la File d'attente de Lecturecependant, j'ai avancé à partir de cela et pense maintenant que je sais que le problème un peu plus claire.

Mon code (le bien fait partie d'une bibliothèque open source, je suis en utilisant ressemble à ceci:

queue.Receive(TimeSpan.FromSeconds(10), MessageQueueTransactionType.Automatic);

Qui est à l'aide de la De messagerie.MessageQueue.Recevoir de la fonction et de la file d'attente est un MessageQueue. Le problème est comme suit.

Au-dessus de la ligne de code sera appelé avec le délai spécifié (10 secondes). Le Receive(...) fonction est une fonction de blocage, et est censé bloquer jusqu'à ce qu'un message arrive dans la file d'attente à laquelle il sera de retour. Si aucun message n'est reçu avant le délai est atteint, il sera de retour à l'expiration du délai. Si un message est dans la file d'attente lorsque la fonction est appelée, elle sera de retour ce message immédiatement.

Cependant, ce qui se passe est que le Receive(...) fonction est appelée, voyant qu'il n'y a pas de message dans la file d'attente, et donc en attente d'un nouveau message arrive. Lorsqu'un nouveau message arrive (avant le délai), elle n'est pas la détection de ce nouveau message et continue d'attente. Le délai d'attente est finalement frappé, à quel point le code continue et les appels Receive(...) de nouveau, où il capte le message et les processus.

Maintenant, ce problème se produit uniquement après un certain nombre de jours ou de semaines. Je peux le faire fonctionner à nouveau normalement par la suppression de & recréer la file d'attente. Il arrive sur des ordinateurs différents, et les différentes files d'attente. Donc, il semble que quelque chose est, jusqu'à un certain point quand il se casse la commande/notification capacité de la Receive(...) fonction utilise.

J'ai vérifié beaucoup de choses différentes, et tout semble normal & n'est pas différent d'une file d'attente qui fonctionne normalement. Il y a beaucoup d'espace disque (13gig libre) et la RAM (environ 350 MO gratuit de 1 GO de ce que je peux dire). J'ai vérifié les entrées de registre qui semblent tous de la même façon que les autres files d'attente, et l'analyseur de performances ne montre pas tout ce qui sort de la normale. J'ai également exécuter le TMQ outil et ne voit rien fait de mal.

Je suis avec Windows XP sur toutes les machines et tous, ils ont le service pack 3 installé. Je ne suis pas d'envoi d'une grande quantité de messages dans les files d'attente, au plus il sera de 1 toutes les 2 secondes, mais généralement beaucoup moins fréquentes que cela. Les messages ne sont que trop petite et nulle part à proximité de la limite de 4 mo.

La seule chose que j'ai remarqué est la p0000001.mq et r0000067.mq fichiers dans C:\WINDOWS\system32\msmq\storage sont à la fois les 4 096 KO cependant, ils sont de cette taille sur d'autres ordinateurs qui ne sont actuellement pas le problème. Le problème ne se produit pas à chaque file d'attente sur l'ordinateur à la fois, que je peux recréer 1 problème de file d'attente sur l'ordinateur et les autres files d'attente le problème persiste.

Je ne suis pas très expérimenté avec MSMQ donc, si vous postez des choses à vérifier pouvez-vous nous expliquer comment vérifier, ou de où je peux trouver plus de détails sur ce que vous parlez.

Actuellement la situation est la suivante:

  • Ordinateura - 4 files d'attente normale
  • Ordinateurb - 2 files d'attente éprouver de problème, 1 file d'attente normale
  • ComputerC - 2 files d'attente connaît problème
  • ComputerD - 1 de la file d'attente normale
  • ComputerE - 2 files d'attente normale

J'ai donc un grand nombre d'ordinateurs/files d'attente afin de les comparer et de les tester.

source d'informationauteur mike