2016-10-06 3 views
1

私の俳優の階層については、私はいくつかのアクターを通してデータを処理するまで私が必要とするすべてのアクターを知らないので、既存のActorRefを作成するか、新しいアクションを作成します。これは、以下のコードで "my-id-1"に存在しないか、すでに存在するアクターを返すかのどちらかのアクターを作成するコードです。 (文書化)アクターが既に存在する場合akka.netにアクターを取得または作成する方法があります

Context.ActorOf(MyActor.Props(message), "my-id-1"); 

上記のコードはInvalidActorNameExceptionをスローします。 Akka.netでこれをどのように達成できますか?

答えて

5

Context.Child(actorName)メソッドを使用すると、現在のアクタに提供された名前の子があるかどうかを確認できます。存在する場合はターゲットアクターのアクターrefを返し、そうでない場合はActorRefs.Nobodyを返します。私が欲しい俳優が子でない場合はどう

var child = Context.Child(actorName); 
if (Equals(child, ActorRefs.Nobody)) 
    child = Context.ActorOf(MyActor.Props(message), actorName); 
+0

:あなたのケースで

コードは次のようになりますか? – Zeus82

+0

あなたは 'Context.ActorSelection'メソッドを使って任意のアクタを見つけることができます。しかし、両親だけが子供を作ることができます。この場合、親を強化して、アクタを取得または作成する任意の要求を処理できるようにする必要があります。同様の概念が[Akka.Cluster.Sharding](http://getakka.net/docs/clustering/cluster-sharding)モジュールの一部として実装されています。 – Horusiath

関連する問題