私のアプリケーションは、アクターのツリー構造を作成できる必要があります。これを行う標準的な方法は、インスタンス化コードをアクタの内部に配置して、子をインスタンス化できるようにすることです。私はむしろ、与えられたパスでアクターをインスタンス化することができると考えています。たとえば、mySystemにアクタAを作成し、次にakka:// mySystem/A/Bと他のアクタを直接作成することができます。そのような機能は存在しますか?それは私のコードを大幅に簡素化します。akkaでアクター階層を手動で作成する
編集:私は自分の電話にはいないので、詳しく教えてください。
は、私はクラスclass myActor extends actor
を持っていると言うと、私はこれらのnウェイ・ツリーを作成する必要があります。代わりに
case Create(n:Int) => {}
ようなもので受け取る機能で自分の子供をインスタンス化するために必要なコードを有していると私はそれのいずれかを含む、代わりに開始時に自分の階層を作成することができないことでmyActorコードを簡素化するために探しています手動で私のコードの。理想的には、この(「作成」架空の静的関数を仮定して)のようなもの:俳優ツリーを作成します
val sys = ActorSystem("mySystem")
Akka.Actors.Create("akka://mySystem/a", new myActor())
Akka.Actors.Create("akka://mySystem/a/b", new myActor())
Akka.Actors.Create("akka://mySystem/a/c", new myActor())
:
今a
/\
b c
、これは存在しませんか?インスタンス化コードで自分のアクターコードを乱雑にしないでこれを行うより良い方法はありますか?
EDIT、ラウンド2
いいえ、この機能は存在しないようです。私は代わりに、俳優のサブクリットを作成し、そこにすべてのインスタンス化コードを強制して、私の具体的な実装クラスがまだきちんと整っているようにしました。
理論的にはこれは良い答えですが、スパゲッティコードが大規模な俳優システムの階層からどのくらいの割合で発生しているかを知ることはできません。この質問に記載された中心的な構成は、実際のソフトウェア目的のために全体的な階層を明確に理解するための仕組みを提供するかもしれない。複雑な階層を明確にするための代替方法をお勧めしますか?または、親子関係の関係をどのように与えなければならないのでしょうか? –
私が持っていない文脈を暗示しているように思われるので、私はこれに答えることは難しいです。アクターシステムは、特定の機能を提供するサブツリーで構成されています。その意味で、アクターシステムは非常にモジュラーです。これらのサブモジュールのそれぞれへのエントリポイントは、そのトップアクターであり、実質的にそのサブツリー全体である。私は外部からサブツリー内にアクターをインストールしようとすることでこのモデルを壊すことでスパゲッティコードが生成されるのを見ることができます。アクタが子を作成する必要があるときはいつでも、それを行う方法を決定するためにconfigを見ることができます。 –