[英]Scala akka typed: how to get ActorRef to Actor from it's instance and send message itself?
[英]How to get Akka actor by name as an ActorRef?
在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())
您可以在resolveOne
上使用方法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
要获取绑定到特定actor的生命周期的
ActorRef
,您需要向actor发送消息(例如内置Identify
消息)并使用来自actor的回复的sender()
引用。
但是对于您正在描述的情况,使用调度程序将消息发送到您已经拥有的ActorRef
(如self
或新的临时actor)可能更合适,并通过向actorSelection("user/somename")
发送MessageCaseClass
来actorSelection("user/somename")
消息做出反应actorSelection("user/somename")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.