Frage:richtige Muster für den Zustand in einem Akka Schauspieler Akkumulieren
Was ist das richtige Muster Zustand in einem Akka Schauspieler zum Akkumulieren?
Kontext:
Lassen Sie uns sagen, dass ich ein paar Dienste haben, dass alle Rückgabedaten.
class ServiceA extends Actor {
def receive = {
case _ => sender ! AResponse(100)
}
}
class ServiceB extends Actor {
def receive = {
case _ => sender ! BResponse("n")
}
}
// ...
Ich möchte ein Steuerungs-/Überwachungs Schauspieler haben, die alle diese Dienste Koordinaten zu sprechen und ihre Antworten zu verfolgen, dann eine Antwort mit allen Daten zurück an den ursprünglichen Absender senden.
class Supervisor extends Actor {
def receive = {
case "begin" => begin
case AResponse(id) => ???
case BResponse(letter) => ???
}
// end goal:
def gotEverything(id: Int, letter: String) =
originalSender ! (id, letter)
def begin = {
ServiceA ! "a"
ServiceB ! "b"
}
}
Wie Service-Antworten kommen, wie behalte ich alle diesen Zustand zusammen? Wie ich es verstehe, wenn ich den Wert von AResponse z. B. var aResponse: Int
zuweisen würde, ändert sich diese Var ständig, wie verschiedene Nachrichten empfangen werden, und es ist nicht möglich für mich zu bleiben, während ich auf die Nachricht BResponse
warte .
Ich realisiere, ich könnte ask
verwenden und nur nest/flatMap Future
's, aber von was ich gelesen habe, ist das ein schlechtes Muster. Gibt es einen Weg all das ohne Futures zu erreichen?
Warum sollte 'aResponse' mehr als einmal geändert werden? Sie senden nur eine Nachricht an 'ServiceA'. Was genau ist dein Ziel? Warte, bis du "AResponse" und "BResponse" erhältst und "gotEverything" mit ihren Werten rufst? – vptheron
>> Was genau ist dein Ziel?Warten Sie, bis Sie AResponse und BResponse erhalten und gotEverything mit ihren Werten aufrufen? YES –
Sie können Antworten in einer Liste mit einem Bezeichner oder einer Akteurref. Speichern – wedens