акка и тесткит. Не могу получить детей актера

У меня есть актер с методом получения:

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.


person Capacytron    schedule 19.04.2017    source источник


Ответы (1)


Создавая детей таким образом

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

вы делаете созданных актеров детьми опекуна (т.е. теряете контекст). Предполагается, что только ваши актеры высшего уровня должны быть созданы таким образом.

Чтобы сделать их детьми вашего актера, вам нужно использовать

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

вместо. Дополнительную информацию о создании актера можно найти в документах.

person Stefano Bonetti    schedule 19.04.2017