2016-06-11 4 views
1

Ниже иерархии akka является родительским родителем, в котором родитель отправляет сообщение дочернему устройству, а дочерний элемент отвечает значением 1. Но родитель не получает, чтобы получать значение, поскольку сообщение «получено 1 "не выводится на консоль.Родитель Akka, не получающий сообщение от ребенка

Правильно ли настроена моя иерархия? :

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

Куда вы отправляете сообщение своему Актеру? – curious

+1

Проблема заключается в том, что ребенок-актер фактически не является дочерним по отношению к родителям, актер не становится дочерним актером, просто создавая ссылку в родительском, вам действительно нужно создать ссылку в контексте родителя. Поэтому вместо 'system.actorOf (Props [ChildActor])' вам нужно сделать 'context.actorOf (Props [ChildActor])'. – curious

+0

@ cage, который работает, если в него ответить –

ответ

2

Потому что вы создали childActor с помощью

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

Это означает, что это верхнего уровня актера, это родитель ActorSystem вместо ParentActor, которые можно было бы ожидать

К если это работает, вам необходимо создать ChildActor следующим образом:

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

внутри ParentActor

Смежные вопросы