Akka ActorRef正在使用null actor创建

时间:2013-08-21 11:47:22

标签: scala null akka

我有一个Akka Actor(在Scala中),如下所示:

object MyActor {
  def apply (system: ActorSystem, parm1: Int, parm2: Int, parm3: ActorRef): ActorRef = {
    system.actorOf (Props (classOf[MyActor], parm1, parm2, parm3), "myactor")
  }
}

class MyActor (parm1: Int, parm2: Int, parm3: ActorRef) extends Actor {

  def receive = {
    [...bunch of cases, ending with _...]
  }
}

实际上,我有几个Actor符合这种模式。但是这个,当我创建这样的实例时:

val myActorRef = MyActor (system, 3, 4, helperRef)

拒绝查看我发送的任何消息。 MyActor.receive ()中的断点永远不会被击中。

我在调试器中稍微戳了一下,发现了一个名为myActorRef._cellDoNotCallMeDirectly._actor的字段。对于我的所有其他actor,此字段包含相关Actor子类的实例,这意味着在这种情况下它应包含MyActor的实例。

但是,在这种情况下,该字段为null

我怀疑这与.receive ()没有看到任何消息这一事实有关。我很惊讶没有NullPointerException飞来飞去,但是没有。

此字段中的null值是否意味着什么?我以某种方式搞砸了吗?

谢谢, Dan Wiebe

1 个答案:

答案 0 :(得分:1)

尝试通过向其发送消息,通过其preStart方法通知其演员存在的其他演员,而不是依赖于创建演员时创建的ActorRef。这应该排除可能阻止您的应用程序工作的任何并发错误。

如果不能解决问题,请启用完整日志记录,以便查看是否正确发送和接收邮件。

相关问题