如何获得Akka演员的名字作为ActorRef?

时间:2014-09-22 04:17:43

标签: scala akka

在Akka,我可以创建一个演员,如下所示。

Akka.system(app).actorOf(Props(classOf[UnzipActor]), name="somename")

然后我在另一个班级,我怎么能得到这个演员?

我可以获得ActorSelection

lazy val unzip: ActorSelection =
  Akka.system.actorSelection("user/" + "somename")

然而,ActorSelection不是我想要的;我想要一个ActorRef。如何获得ActorRef

我希望有一个ActorRef,因为我希望使用调度程序调度ActorRef

Akka.system(app).scheduler.schedule(
  5 seconds, 60 seconds, mustBeActorRef, MessageCaseClass())

2 个答案:

答案 0 :(得分:22)

您可以在ActorSelection上使用方法resolveOne来异步获取ActorRef。

implicit val timeout = Timeout(FiniteDuration(1, TimeUnit.SECONDS))
Akka.system.actorSelection("user/" + "somename").resolveOne().onComplete {
  case Success(actorRef) => // logic with the actorRef
  case Failure(ex) => Logger.warn("user/" + "somename" + " does not exist")
}

参考:http://doc.akka.io/api/akka/2.3.6/index.html#akka.actor.ActorSelection

答案 1 :(得分:5)

Looking up Actors by Concrete Path

  

要获取绑定到特定actor的生命周期的ActorRef,您需要向actor发送消息(例如内置的Identify消息)并使用{ {1}}参考演员的回复。

但是对于您正在描述的情况,使用调度程序向您已经拥有的sender()(如ActorRef或新的临时演员)发送消息可能更合适,并且通过向self发送MessageCaseClass来对该邮件做出反应。