Ich versuche einen Akteur auszuwählen, der bereits erstellt wurde. Hier ist ein Code:Wie Akka Schauspieler mit actorSelection auswählen?
val myActor = system.actorOf(Props(classOf[MyActor]), "myActorName")
println("myActor path - " + akka.serialization.Serialization.serializedActorPath(myActor))
println("Selection from spec akka://unit-test/user/myActorName " + system.actorSelection("akka://unit-test/user/myActorName").resolveOne().value)
println("Selection from spec /user/myActorName/ " + system.actorSelection("/user/myActorName/").resolveOne().value)
Das Ergebnis ist:
myActor path - akka.tcp://[email protected]:46635/user/myActorName#1444872428
Selection from spec akka://unit-test/user/myActorName None
Selection from spec /user/myActorName/ None
Auch ich eine Nachricht an Schauspieler passieren kann und es vervollständigt gut. Was habe ich bei actorSelection verpasst? Wie wählt man den Schauspieler richtig aus?
AKTUALISIERT
Es ist sehr seltsam, aber wenn ich system.actorSelection("/user/myActorName/").resolveOne().value
mit system.actorFor("/user/myActorName/")
alles funktioniert ersetzen. Ich meine actorFor
gibt einen Schauspieler zurück. (Was ist keine richtige Lösung wegen actorFor
ist veraltet)
Sehr überraschend :) Ich dachte, dass "implizite Timeout" in "resolveOne" verwendet wird, um zu warten und das Ergebnis zu liefern. – Cherry
Nein :). Scaladoc: "Es wird mit dem Fehler ActorNotFound abgeschlossen, wenn kein solcher Akteur existiert oder die Identifikation nicht innerhalb des angegebenen Timeouts abgeschlossen wurde." – dk14
So Timeout wird nur verwendet, um die Zukunft zu vervollständigen oder fehlzuschlagen, aber Sie müssen diesen zukünftigen klassischen Weg noch verarbeiten – dk14