Scala 如何获得阿克卡演员作为演员的名字?
在阿卡,我可以创造一个演员如下Scala 如何获得阿克卡演员作为演员的名字?,scala,akka,Scala,Akka,在阿卡,我可以创造一个演员如下 Akka.system(app).actorOf(Props(classOf[UnzipActor]), name="somename") 那么我在另一个班,我怎么能得到这个演员呢 我可以获得一个ActorSelection lazy val unzip: ActorSelection = Akka.system.actorSelection("user/" + "somename") 然而,ActorSelection不是我想要的;我想要一个ActorR
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())
:
要获取绑定到特定参与者生命周期的ActorRef
,您需要向参与者发送消息,如内置消息,并使用参与者回复的sender()
引用
但对于您正在描述的情况,可能更适合使用调度程序将消息发送到您已经拥有的
ActorRef
(如self
或新的临时actor),并通过将MessageCaseClass
发送到actorSelection(“user/somename”)来响应该消息
您可以使用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")
}
ref:为什么需要actor ref,您可以将消息发送到ActorElection。但是,如果要在父上下文中查找子参与者,则可以使用getContext().child(“somename”)参见此处