儿童演员的回复应该泡到其父母吗?

exp*_*ert 0 scala chaining actor akka

我是Actors的新手,我正在努力理解如何正确地连接演员.我已经阅读了Ask:Send-And-Receive-Future部分文档.

是现在我做到了

case class Message1(text : String)

class RootActor extends Actor {
  def receive: Actor.Receive = {
    case Message1(message) => {
      (context.actorOf(Props( new TestActor1)) ? message)(5.seconds) pipeTo sender
    }
  }
}

class TestActor1 extends Actor {
  def receive: Actor.Receive = {
    case message : String => {
      sender ! (message + " TestActor1")
    }
  }
}

object Test {
  def main(args: Array[String]) {
    println("Start!")

    implicit val system = ActorSystem()
    val rootActor = system.actorOf(Props( new RootActor))

    for (reply1 <- (rootActor ? Message1("Begin"))(5.seconds).mapTo[String])
      println(reply1)
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我手动转发回复.但不应该从儿童演员回复自动向其父母回复?这是正确的做法吗?

另外我担心以手动方式冒泡回复我使用ask需要超时.但是,如果某个子actor需要更多时间来完成其工作,但是当我向root actor发送消息时,我受限于一个超时值?在我看来,在整个链条上保持适当的超时非常麻烦.

我该如何简化它?

cmb*_*ter 5

只需使用forward.这就是它的用途.像这样使用它:

context.actorOf(Props( new TestActor1)).forward(message)
Run Code Online (Sandbox Code Playgroud)