我是Actors的新手,我正在努力了解如何正确地连接演员。我已阅读文档的Ask: Send-And-Receive-Future部分。
Here就是我现在的做法
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)
}
}
所以我手动中继回复。但不应该从儿童演员回复自动向其父母回复?这是正确的做法吗?
另外我担心以手动方式冒泡回复我使用需要超时的ask
。但是,如果某个子actor需要更多时间来完成其工作,但是当我向root actor发送消息时,我受限于一个超时值?在我看来,在整个链条上保持适当的超时非常麻烦。
如何简化它?
答案 0 :(得分:5)
只需使用forward
即可。这就是它的用途。像这样使用它:
context.actorOf(Props( new TestActor1)).forward(message)