2016-10-01 2 views
0

Я новичок в акке, и мне интересно, как заставить ребенка-актера получать сообщения.Я не могу получить дочернего актера для получения сообщений

У меня есть один родительский актер, который распечатывает, что он получил сообщение, а затем отправляет сообщение своему потомку, которое затем распечатывает, что оно получило сообщение.

Когда я запускаю программу, только родительский актёр печатает свое сообщение. Есть что-то мне не хватает?

Родитель актер

class TestDirector(name: String) extends Actor { 
    import TestDirector._ 

    implicit val timeout = Timeout(5.seconds) 

    private var child: ActorRef = _ 

    override def preStart(): Unit = { 
    println(name + " pre-start") 
    child = context.actorOf(props("test-file"), name = "child-actor") 
    } 

    override def receive: Receive = { 
    case TestDirectory(dir) => 
     println("Test Director") 
     child ! TestWorker.TestFile 
    } 

} 

object TestDirector { 
    case class TestDirectory(dirName: String) 
    case class TestResponse(message: String) 

    def props(dirName: String) = Props(classOf[TestDirector], dirName) 

} 

ребенок актер

class TestWorker(fileName: String) extends Actor { 
    import TestWorker._ 

    override def receive: Receive = { 
    case TestFile => println("Hello world") 
    } 

} 

object TestWorker { 
    case object TestFile 

    def props(fileName: String) = Props(classOf[TestWorker], fileName) 
} 

ответ

0

В TestDirector.preStart, вы говорите

child = context.actorOf(props("test-file"), name = "child-actor") 

Те "реквизит" являются испытания Director .props, который вы импортировали несколькими строками выше, так что вы бесконечно создаете новые TestDirectors. Я думаю, что вы хотите вместо этого испытания работник .props:

child = context.actorOf(TestWorker.props("test-file"), name = "child-actor") 
+0

да что установил его, глупая ошибка, спасибо :) – Will

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