5

Akka で context().actorOf() を使用してアクターを作成すると、有効な ActorRef が返されます。ただし、同じことを行っても、actorFor と、アクターが表示されることがわかっているパスを使用して ActorRef を作成すると、有効な ActorRef を確実に取得することはできません。アクターが正常に登録されたことを確認するにはどうすればよいですか?

上記の説明では、actorOf() から返された ActorRef を単純に使用できます。ただし、私の実際のケースでは、それ自体が子アクターを登録するアクターを作成し、それを解決する必要があるため、一般的な問題は、「アクターが既知のパスに登録されたことを通知されるのをどのように待つ/登録することができますか? "。

4

2 に答える 2

7

Akka 2.2.1 以降、ActorSelection.resolveOne を使用して、アクターの選択から ActorRef を取得できます。

implicit val timeout = Timeout(5, TimeUnit.SECONDS)
val selection = system.actorSelection("/user/myActor")
val actor = Await.result(selection.resolveOne(), timeout.duration)

ドキュメントからhttp://doc.akka.io/api/akka/2.2.1/index.html#akka.actor.ActorSelection

この選択に一致する ActorRef を解決します。そのようなアクターが存在する場合、結果は ActorRef で完了する Future として返されます。そのようなアクターが存在しない場合、または指定されたタイムアウト内に識別が完了しなかった場合は、ActorNotFound の失敗で完了します。

内部では、アクターと対話してその存在を確認し、その ActorRef を取得します。

于 2013-09-10T15:18:24.653 に答える
0

まず第一に、actorOf から返された ActorRef がまだ生きているという保証はありません。コンストラクターが失敗する可能性があるからです。

第 2 に、actorFor はアクターを見つけたかもしれませんが、見つかった直後で、作業を開始する直前に死んでしまいました。

第 3 に、アクター間に自然なランデブー ポイントが存在するように、依存関係が論理的な方法で伝播されるようにアプリケーションを構築することは、通常は優れた方法です。

上記のいずれかが役立つことを願って、

ハッピーハッキング!

√</p>

于 2012-05-11T15:24:09.857 に答える