akka和testkit . 不能得到演员的孩子

我有一个接收方法的演员:

def receive: Actor.Receive = {
    case Tick =>
        val child = context.system.actorOf(...) // create actor
        context.watch(child)
        child ! something

    case AskRunningJobs =>
      log.info(s"My children: ${context.children.toList.length}")
      log.info(s"My children: ${context.children.toList.map(_.path.toSerializationFormat).mkString(" ||| ")}")
      sender ! RunningJobs(context.children.toList.length)

    case unknown =>
      log.warning(s"unknown message: $unknown")
  }

我有详细的日志输出,我可以清楚地看到孩子们已经创建并且正在运行 . 但

context.children.toList.length

始终为零 . 为什么?我正在使用TestKit运行我的演员 .

回答(1)

2 years ago

通过这种方式创造孩子

val child = context.system.actorOf(...) // create actor

你让被创造的演员成为监护人的孩子(即你失去了背景) . 只有你的顶级演员才能以这种方式创作 .

要让他们成为你演员的孩子,你需要使用

val child = context.actorOf(...) // create actor

代替 . 有关演员创作的更多信息可以在docs中找到 .