在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())
答案 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
来对该邮件做出反应。