Akka2.1/Scala - 在actor中创建的节点不会出现在context.children中?

Jas*_*onG 1 scala akka

我有一个抽象类,它是一个actor,它有一个像这样的方法

def getNewConnection(id: String): ActorRef

A class that subclasses it defines the method.

  override def getNewConnection(id: String): ActorRef = {
    val actorRef = system.actorOf(Props(new RsvpClusterableClientConnection(service, id)))
    actorRef ! Subscribe(clientConnectionId)
    actorRef
  }
Run Code Online (Sandbox Code Playgroud)

然后它存储了actorRef.

问题是,当我进入context.children它是空的.同样,如果儿童演员去了context.parent!"嘿!" 父母不会收到消息.如果我查看路径,context.partent显示/ users /和REAL父actor实际上是/ users/$ 2b

我找不到有类似问题的人.这是一个类似这样的测试:

class ZombieTest extends TestKit(ActorSystem("zombietest")) with HelperSpec with ShouldMatchers {

  import ExecutionContext.Implicits.global
[...]
val conActor = system.actorOf(Props(new ConnectionActor(testService1)))
}
Run Code Online (Sandbox Code Playgroud)

编辑

AgileSteel是正确的.从系统创建将创建一个顶级actor.从上下文创建将创建一个孩子.

来自akka文档:

使用默认构造函数创建Actor

object Main extends App {  
val system = ActorSystem("MySystem")   val myActor =
system.actorOf(Props[MyActor], name = "myactor") The call to actorOf
Run Code Online (Sandbox Code Playgroud)

返回ActorRef的实例.这是Actor实例的句柄,您可以使用它与Actor进行交互.ActorRef是不可变的,与它所代表的Actor有一对一的关系.ActorRef也是可序列化和网络感知的.这意味着您可以对其进行序列化,通过网络发送并在远程主机上使用它,它仍将通过网络在原始节点上表示相同的Actor.

在上面的示例中,actor是从系统创建的.也可以使用actor上下文从其他actor创建actor.不同之处在于如何安排主管层级.使用上下文时,当前actor将成为创建的子actor的监督者.当使用该系统时,它将是一个顶级演员,由系统监督(内部监护人演员).

class FirstActor extends Actor {   val myActor =
context.actorOf(Props[MyActor], name = "myactor")
Run Code Online (Sandbox Code Playgroud)

agi*_*eel 7

你应该/必须调用actorOfcontext,而不是system建立儿童时.