2010-11-30 3 views
3

Ich habe eine Anwendung basierend auf dem Akteur-Modell-Muster entwickelt, die die Spring Application Context-Ereignisse als die Art und Weise verwendet, um Nachrichten zu übergeben. Ich habe drei Schichten:Akteur-Modellmuster: Begrenzung der Anzahl der gleichzeitig laufenden Akteure

  1. gibt eine requesttransactionevent
  2. Fragen ein dotransactionevent < - sollte

Schicht 1 die aktuelle Anzahl der laufenden Transaktionen

  • Probleme eine donetransactionevent begrenzen speichert die Anforderung an die DB (für verteilte Archivierungs-Überwachungsanforderungen) und gibt die Client-Anfrage-Schicht 2 aus, die sie empfängt, und sollte prüfen, wie viele atrotransactionevents es ausgeführt hat (ausgegebene und nicht zurückgegebene donetransaction), wenn i t hat einen freien Slot, sollte es eine Transaktion auslösen und es wird auch als Listener für das donetransactionevent deklariert.

    Was ist der eleganteste Weg, um Schicht 2 ohne eine synchrone Methode oder etwas dieser Art zu implementieren, der Trick hier ist, dass es die Request-Parameter abgerufen werden muss, die von Schicht1 in der db für die Ausstellung eines drotransactionevent abgespeichert werden.

  • Antwort

    0

    Sie könnten die Sammlung von Transportereignissen als Warteschlange behandeln und eine parallele Gruppe von Warteschlangenmanagern haben, die jeweils ein Element aus der Warteschlange verarbeiten. Indem Sie die Anzahl der Warteschlangenhandler steuern, können Sie die Anzahl der laufenden Transaktionen wie beschrieben steuern.

    +0

    Hallo, wenn Schicht2 eine Reihe von Handlern halten wird, wird dies die 2 letzten Schichten eng koppeln, ich würde eher vermeiden, dass Schicht 3 absichtlich erstellt wurde, um größere Flexibilität zu ermöglichen. – Amnon