In letzter Zeit habe ich mich Schauspieler in Klassen wickeln, so dass ich ein wenig von der Typsicherheit zurück, die ich im Umgang mit ActorRef
s. Das Problem ist, am Ende, dass ich nicht nur eine bestimmte Nachricht senden muss, muss ich auch die Antwort auf das erwartete Ergebnis zu werfen. Also ich dachte, dass ich Nachrichten an Akteure senden könnte, die Promise
enthalten, so dass sie das Ergebnis schließlich melden könnten.Akka Schauspieler: frage Muster vs Promise
Ist das eine schlechte Idee? Es sieht mir ziemlich gut aus ... Ist typsicher und funktioniert genauso gut. Warum ist niemand mit der Idee gekommen? Ist irgendetwas falsch daran, das ich nicht bemerkt habe?
stellen Muster-basierte Lösung
case class GetUser(id:Long)
(actorRef ! GetUser(1l)).mapTo[User]
class UserRepoActor extends Actor{
def receive={
case GetUser(id)=>
sender() ! getUser(id)
}
...
}
Versprechen basierte Lösung
case class GetUser(id: Long, resp: Promise[User])
val req = GetUser(1l,Promise())
actorRef ! req
req.resp.future // No casting!!
class UserRepoActor extends Actor{
def receive={
case GetUser(id,resp)=>
response.success(getUser(id))
}
...
}
Was meinst du damit, Nachrichten an Schauspieler zu senden, die Versprechen enthalten? In jedem Fall müssen Sie eine Übereinstimmung für die eingehende Nachricht erstellen. Können Sie einige Codebeispiele posten? – sparkr