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

时间:2013-04-09 18:15:39

标签: 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
  }

然后它存储了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)))
}

修改

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

来自akka文档:

  

使用默认构造函数

创建Actor
object Main extends App {  
val system = ActorSystem("MySystem")   val myActor =
system.actorOf(Props[MyActor], name = "myactor") The call to actorOf
  

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

     

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

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

1 个答案:

答案 0 :(得分:7)

创建孩子时,您应该/必须在actorOf而不是context致电system