Ich habe einen Windows Dienst , der eine Bildkonvertierung durchführt. Es funktioniert, indem man abfeuert, wenn irgendeine Datei (in einem bestimmten Ordner) umbenannt wird (dh Dateiwächter umbenennen). Funktioniert gut, bis ich eine riesige Menge Bilder in diesem Ordner abgelegt (und umbenannt) habe. CPU Redlines, etc ..
Also wollte ich meinen Code ändern, um MSMQ zu verwenden, um alle Dateien, die konvertiert werden müssen, in eine Warteschlange zu stellen. Fein. Jedes Mal, wenn die Datei umbenannt wird und der Dateiwatcher ausgelöst wird, füge ich der Warteschlange eine neue Nachricht hinzu. Kewl.
Problem ist das - & gt; Wie greife ich jeweils eine Nachricht aus der Warteschlange?
Muss ich ein Timer-Objekt erstellen, das die Warteschlange alle xxx Sekunden abfragt? Oder gibt es eine Möglichkeit, ständig den ersten Gegenstand in der Warteschlange zu sehen. Sobald eine Nachricht existiert, extrahiere sie, verarbeite sie und fahre fort (was bedeutet, dass du weiter spähst, bis die Welt explodiert).
Ich habe mich gefragt, ob ich nur eine While-Schleife um die Receive-Methode machen muss. Pseduo-Code ist unten (in Edit # 2) ...
Hat jemand Erfahrung damit und Anregungen?
Danke schön!
Wenn WCF der Weg ist, kann jemand stattdessen einen Beispielcode usw. bereitstellen?
Hier ist ein Pseudo-Code, an den ich dachte ...
%Vor%Ich hatte den Eindruck, dass MSMQ mit IBMs MQ-Produkt kompatibel ist. Wenn dies ist der Fall, können Sie MQGET mit einer Zeitüberschreitung aufrufen und sich nicht um Abfragen kümmern.
Holen Sie einfach eine Nachricht aus der Warteschlange mit einem Timeout von zwei Sekunden (zum Beispiel). Wenn da einer war, dann bearbeite es. Beenden Sie dann den Dienst, falls gewünscht, oder wechseln Sie mit warten zu MQGET.
Dies bedeutet, dass Ihr Dienst die CPU-Zeit nicht unnötig in Anspruch nimmt, aber er kann immer noch rechtzeitig beendet werden, wenn er signalisiert wird.
Im Allgemeinen hätten Sie etwas wie:
%Vor%Klingt so, als müssten Sie in WCF schauen.
Warteschlangen in Windows Communication Foundation
Lastausgleich. Anwendungen senden kann empfangende Anwendungen überfordern mit Nachrichten. Warteschlangen können verwalten nicht übereinstimmende Nachrichtenproduktion und Verbrauchsraten, so dass ein Empfänger ist nicht überwältigt.
Hier finden Sie ein Beispiel mit WCF und MSMQ
Beachten Sie, dass das Servicebeispiel bei OnStart () blockiert wird. Starten Sie stattdessen einen Arbeitsthread:
%Vor%Rufen Sie dann BeginReceive () vom Worker auf.