Zeitüberschreitung der MSMQ-Methode Receive ()

Meine ursprüngliche Frage von vor einiger Zeit istLangsames Lesen der MSMQ-WarteschlangeAllerdings habe ich mich weiterentwickelt und denke jetzt, dass ich das Problem ein bisschen klarer kenne.

Mein Code (der eigentlich Teil einer Open-Source-Bibliothek ist, die ich verwende) sieht folgendermaßen aus:

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

Welches nutzt dieMessaging.MessageQueue.Receive Funktion und Warteschlange ist eine MessageQueue. Das Problem ist wie folgt.

Die obige Codezeile wird mit dem angegebenen Timeout (10 Sekunden) aufgerufen. DasReceive(...) function ist eine blockierende Funktion und soll blockieren, bis eine Nachricht in der Warteschlange eintrifft und zu welchem ​​Zeitpunkt sie zurückkehrt. Wenn vor Erreichen des Timeouts keine Nachricht eingeht, wird sie nach Ablauf des Timeouts zurückgegeben. Befindet sich beim Aufruf der Funktion eine Nachricht in der Warteschlange, wird diese Nachricht sofort zurückgegeben.

Was jedoch passiert, ist dieReceive(...) Die Funktion wird aufgerufen, wobei festgestellt wird, dass sich keine Nachricht in der Warteschlange befindet, und daher darauf gewartet wird, dass eine neue Nachricht eingeht. Wenn eine neue Nachricht eingeht (vor dem Timeout), erkennt sie diese neue Nachricht nicht und wartet weiter. Das Timeout wird schließlich erreicht, und an diesem Punkt wird der Code fortgesetzt und aufgerufenReceive(...) wieder, wo es die Nachricht aufnimmt und verarbeitet.

Dieses Problem tritt jetzt nur nach einigen Tagen / Wochen auf. Ich kann es wieder normal arbeiten lassen, indem ich die Warteschlange lösche und neu erstelle. Dies geschieht auf verschiedenen Computern und in verschiedenen Warteschlangen. Es scheint also, als würde sich etwas aufbauen, bis irgendwann die Auslöse- / Benachrichtigungsfähigkeit derReceive(...) Funktion verwendet.

Ich habe viele verschiedene Dinge überprüft und alles scheint normal und unterscheidet sich nicht von einer Warteschlange, die normal funktioniert. Es gibt viel Speicherplatz (13 GB frei) und RAM (ca. 350 MB frei von 1 GB, soweit ich das beurteilen kann). Ich habe die Registrierungseinträge überprüft, die alle wie die anderen Warteschlangen aussehen, und der Systemmonitor zeigt nichts Ungewöhnliches an. Ich habe auch das TMQ-Tool ausgeführt und kann daran nichts Auffälliges erkennen.

Ich verwende Windows XP auf allen Computern und auf allen Computern ist Service Pack 3 installiert. Ich sende nicht viele Nachrichten an die Warteschlangen, höchstens alle 2 Sekunden, aber im Allgemeinen viel seltener. Die Nachrichten sind auch nur klein und nicht annähernd 4 MB groß.

Das einzige, was mir gerade aufgefallen ist, sind die Dateien p0000001.mq und r0000067.mq in C: \ WINDOWS \ system32 \ msmq \ storage. Beide sind 4.096 KB groß, jedoch auch auf anderen Computern, bei denen das Problem derzeit nicht auftritt. Das Problem tritt nicht bei jeder Warteschlange auf dem Computer gleichzeitig auf, da 1 Problemwarteschlange auf dem Computer neu erstellt werden kann und bei den anderen Warteschlangen das Problem weiterhin auftritt.

Ich bin nicht sehr erfahren mit MSMQ. Wenn Sie also mögliche zu überprüfende Dinge posten, können Sie bitte erläutern, wie diese überprüft werden sollen oder wo ich weitere Details zu dem finden kann, worüber Sie sprechen.

Derzeit ist die Situation:

ComputerA - 4 Warteschlangen normalComputerB - 2 Warteschlangen, bei denen ein Problem auftritt, 1 normale WarteschlangeComputerC - 2 Warteschlangen, bei denen ein Problem auftrittComputerD - 1 Warteschlange normalComputerE - 2 Warteschlangen normal

Ich habe also eine große Anzahl von Computern / Warteschlangen zum Vergleichen und Testen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage