2017-04-19 3 views
0

Ich habe einen Schauspieler erhalten mit Verfahren erhalten:akka und testkit. Kann nicht Schauspieler Kinder

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") 
    } 

ich detaillierte Protokollausgabe haben und ich kann deutlich sehen, dass Kinder geschaffen werden und sie laufen. Aber

context.children.toList.length 

ist immer Null. Warum? Ich lasse meinen Schauspieler mit TestKit laufen.

Antwort

2

von Kindern auf diese Weise

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

Sie machen die erstellten Akteure Kinder des Wächters (das heißt Sie verlieren den Kontext) zu schaffen. Nur Ihre Top-Level-Akteure sollen auf diese Weise erstellt werden.

Für sie Kinder Ihrer Schauspieler zu machen, müssen Sie

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

stattdessen verwenden. Weitere Informationen zur Schauspieler-Erstellung finden Sie in der docs.

+0

Ah, danke. Ich habe es verpasst... – Sergey

Verwandte Themen