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())
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: http://doc.akka.io/api/akka/2.3.6/index.html#akka.actor.ActorSelection
特定のアクターのライフサイクルにバインドされている
ActorRef
を取得するには、組み込みのIdentify
メッセージなどのメッセージを送信する必要があります。アクターと、アクターからの応答のsender()
参照を使用します。
しかし、あなたが説明しているケースでは、スケジューラを使用して、既に持っているActorRef
(self
または新しい一時的なアクタなど)にメッセージを送信し、反応する方が適切な場合がありますMessageCaseClass
をactorSelection("user/somename")
に送信して、そのメッセージに送信します。