我有一个接收方法的演员:
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运行我的演员。
答案 0 :(得分:2)
以这种方式创造孩子
val child = context.system.actorOf(...) // create actor
你让被创造的演员成为监护人的孩子(即你失去了背景)。只有你的顶级演员才能以这种方式创作。
要让他们成为演员的孩子,你需要使用
val child = context.actorOf(...) // create actor
代替。有关演员创作的更多信息可以在docs。
中找到