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

Phi*_*hil 20 scala akka

在Akka我可以创建一个演员如下.

Akka.system(app).actorOf(Props(classOf[UnzipActor]), name="somename")
Run Code Online (Sandbox Code Playgroud)

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

我可以得到一个 ActorSelection

lazy val unzip: ActorSelection =
  Akka.system.actorSelection("user/" + "somename")
Run Code Online (Sandbox Code Playgroud)

然而,一个ActorSelection不是我想要的; 我想要一个ActorRef.我怎么能得到一个ActorRef

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

Akka.system(app).scheduler.schedule(
  5 seconds, 60 seconds, mustBeActorRef, MessageCaseClass())
Run Code Online (Sandbox Code Playgroud)

Arn*_*lay 22

您可以resolveOne在ActorSelection上使用该方法异步获取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")
}
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*tin 5

通过具体路径查找演员:

为了获得一个ActorRef绑定到你需要发送一个消息,例如内置的特定演员的生命周期Identify消息,到演员,并使用sender()从演员的答复的参考.

但对于您所描述的情况下,可能更适合使用调度将消息发送到ActorRef你已经有(像self或新的临时演员),并通过发送一个反应,该消息MessageCaseClassactorSelection("user/somename").