【问题标题】:Should replies from child actor bubble up to its parent?孩子演员的回复应该冒泡给父母吗?
【发布时间】:2013-09-30 19:23:19
【问题描述】:

我是 Actors 的新手,我正在尝试了解如何正确链接 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。但是,如果某个子角色需要比其他角色更多的时间来完成它的工作,但是当我向根角色发送消息时我受到一个超时值的限制,该怎么办?在我看来,在整个链中保持适当的超时非常麻烦。

我怎样才能简化它?

【问题讨论】:

    标签: scala akka actor chaining


    【解决方案1】:

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

    context.actorOf(Props( new TestActor1)).forward(message)
    

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2013-06-04
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多