2016-06-11 6 views
1

Unter der Akka-Hierarchie befindet sich ein Eltern-Kind, bei dem der Elternteil eine Nachricht an das Kind sendet und das Kind mit Wert 1 antwortet. Aber der Elternteil scheint den Wert nicht zu empfangen, da die Nachricht "Empfangen ist 1 "wird nicht auf Konsole gedruckt.Akka-Elternteil, der keine Nachricht von Kind erhält

Ist meine Hierarchie richtig eingerichtet? :

import akka.actor.Actor 
import akka.actor.ActorSystem 
import akka.actor.Props 

class ChildActor extends Actor { 
    def receive = { 
    case receivedValue: Int => { 
     println(receivedValue); 
     context.parent ! 1 
    } 
    } 
} 

object ParentChild extends App { 

    val system = ActorSystem() 

    val parentActor = system.actorOf(Props[ParentActor]) 

    class ParentActor extends Actor { 

    val childActor = system.actorOf(Props[ChildActor]) 
    childActor ! 1 
    def receive = { 
     case v: Int => println("received is " + v); 
    } 

    } 

} 
+0

Wohin senden Sie eine Nachricht an Child actor? – curious

+1

Das Problem ist Kind Schauspieler ist nicht wirklich Kind des Elternteils, ein Schauspieler wird nicht ein Kind Schauspieler nur eine Referenz in Eltern erstellen, müssen Sie tatsächlich eine Referenz im Kontext der Eltern erstellen. Anstatt 'system.actorOf (Props [ChildActor])' müssen Sie 'context.actorOf (Props [ChildActor])' 'ausführen. – curious

+0

@curious, das funktioniert, wenn in Antwort gesetzt wird nicht akzeptieren –

Antwort

2

Da Sie die childActor

mit erstellt

val childActor = system.actorOf(Props[ChildActor])

Was es bedeutet, ein Top-Level-Schauspieler ist, dann ist es Elternteil ActorSystem anstelle des ParentActor, die Sie

erwarten funktioniert es wie erwartet, müssen Sie ChildActor wie folgt erstellen

val childActor = context.actorOf(Props[ChildActor])

innerhalb ParentActor