Frage

Ich bin derzeit der Bau von zwei Windows-Diensten:

  • Die ersten Nachrichten von einer Internetverbindung nimmt und fügt diese in eine Datenbank. Dies ist so konzipiert, dass schnell und stabil und keine andere Verarbeitung tun

  • Die zweite führt einen Batch-Prozess mit neuen Nachrichten, die seit dem letzten ran angekommen sind.

Ich versuche, einen Weg zu denken, so dass der zweite Dienst wird nur den Batch-Prozess ausgeführt werden, wenn neue Nachrichten bereit sind, verarbeitet zu werden, und wenn die zweiten Service-Fehler der erste Dienst wird weitermachen und umgekehrt. Im Moment verwendet sie eine Schleife alle 5 Sekunden.

ich gerade denke eine Nachrichten-Warteschlange zu verwenden, wo der erste Dienst nur eine Nachricht schreibt, wenn die Warteschlange leer ist, und der zweite Dienst werden sehen, ob die Warteschlange keine Nachrichten enthält, wenn nicht, bis eine Nachricht in einen asynchronen Warte gehen kommt und dann die Nachricht und führt entfernen. Daher die Warteschlange mit nicht wirklich als eine Warteschlange, sondern als Binär-Schalter, wenn es Zustandsänderungen verursachen ein Ereignis an den zweiten Dienst ausgelöst werden.

Ich nehme es einen besseren Weg, dies zu tun, dass ich nicht jemand begegnet mir bitte in die richtige Richtung zeigen könnte?

War es hilfreich?

Lösung

Eigentlich Weg ist GENAU , wie ich dies für diese Ergebnisse umsetzen würde. Mit MSMQ, Sie müssen nicht überprüfen, um zu sehen, ob Sie eine Nachricht in die Warteschlange geschrieben haben, der erste Dienst schreibt nur in die Warteschlange, und der zweite Dienst liest gerade von ihm, sie zu verarbeiten (wenn er aktiv ist).

Die Schönheit MSMQ verwenden ist, dass der eine oder andere Dienst nach unten sein kann, aber die Warteschlangen wird nach oben, so dass Sie die Verarbeitung fortgesetzt werden kann.

Andere Tipps

Sieht für mich, als ob für diesen Fall alles, was Sie brauchen, ist ein Mail-Fach ist. Die erste Dienst speichert in die DB und sendet dann eine „Arbeit zu tun“ -Meldung. Die andere wartet nur eingehende Nachrichten.

MSMQ ist ein bisschen Schwergewicht für etwas so einfach. Dann wieder konnte man nur MSMQ verwenden und loszuwerden, dass ganz zu DB. Das wäre es, die Art und Weise, es zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top