1

アクター(A)がアクター(B)を作成し、それを監視してクラッシュすると再起動する設定があります。アクターシステムの外部から、「ネストされた」アクターBから何らかの値を取得したいと思います。

次を使用して、ネストされたアクターをactorSystemに直接要求できます。

val nestedActorB = myActorSystem.actorFor("/user/A/B")

このアクターへの参照を保持できますか、またはネストされたアクターに何かを要求するたびに、actorSystemに参照を要求する必要があります。(または、親アクターに参照を依頼する必要があります)?

このシナリオのベストプラクティスは何でしょうか?(scala2.9.1およびakka2.0.4)

ありがとう、アルバート

4

3 に答える 3

2

はい、アクターへの参照を保持し、システムに毎回を要求する必要はありませんactorFor

ローカルアクターとリモートアクターには違いがあり、参照しているドキュメントのパッセージがあいまいで、チケットを開きました。

ローカルアクターはactorFor通話中に一度だけルックアップされるため、ルックアップする前に存在する必要がありますが、リモートアクターへの送信は常にパスによって行われ、リモートアクターは毎回リモートノードでルックアップされます。

于 2012-12-04T08:49:58.630 に答える
1

再起動後も、参照は同じままです。パスは安定しているので、B常にの子になります。がトップレベルの俳優である場合は、常に下に表示されます。そうそう、常に同じ俳優を指します。A"/A/B"A"/user/A""/user/A/B"

于 2012-12-03T11:39:40.130 に答える
1

akka docでわかるように、参照は、実行時に、メッセージを送信したり、参照しているアクターの活気をチェックしたりするたびに、アクターツリーをトラバースするオブジェクトです。

つまり、そのパスに属するアクターが再起動された場合や、すでに終了している場合でも、そのアクターと通信するときはいつでも、actorForメソッドで取得した参照を使用できます。

于 2012-12-03T13:32:12.697 に答える