簡體   English   中英

如何獲得Akka演員的名字作為ActorRef?

[英]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")發送MessageCaseClassactorSelection("user/somename")消息做出反應actorSelection("user/somename")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM