2015-01-02 4 views
7

私はいくつかのAkkaプロジェクトを持っていますが、私は次のようなシナリオを持っています:人間が読める名前を持っている俳優はたくさんありますが、同時にそれぞれに固有の名前を生成したくありません自分で。ですから、自動的に生成された名前の前に特定の文字列を付けるように、小道具や俳優システムに伝える方法はありますか?いくつかのアクタの自動名にプレフィックスを付けることはできますか?

たとえば、Worker型の子供をいくつか作成する俳優のMasterがいます。私は各子供の名前が「労働者」で始まることを願っていますので、私は簡単にログに従うことができます。可能であれば、より細かい方法で俳優の名前を付ける他の方法があるかどうかを知りたいと思います。

ありがとうございます。

EDIT:これは私が現在

がしたいものの一例では、次の2つのオプション、これまで私が見ることができるようあります

1)を自動的に生成して俳優を作成します。ユーザー指定の名前

ActorRef myActor = mySystem.actorOf(MyActor.props(), MyNamingAPI.getSomeNewName()); 
で役者を作成します)

ActorRef myActor = mySystem.actorOf(MyActor.props()); 

2に名前を付けます10

1)ログには誰が誰なのかわからないので、悪いです。私は自分自身のAPIを書く/使用する必要があり、他の誰かがサブシステムとして自分の俳優プロジェクトを使用しているため、名前を繰り返したり、別の俳優システムを使用したりしないように注意する必要があるからです。したがって、移植性がありません。

アッカのようなものサポートされている場合、私は希望

:%記号が自動的に生成されたIDを示し

ActorRef myActor = mySystem.actorOf(MyActor.props(), "my-actor-%"); 

を。

+0

悲しいことに、これはAPIではサポートされていません。独自の名前を生成したり、生成を行うAPIを使用したりすることはできません。 –

答えて

1

@VinceEmighはコメントで述べたように、これはAPIによってサポートされていないです。さらに、Akkaチームはすぐに(またはまったく)それをサポートする予定はありません。この詳細についてはhereをご覧ください。

-2

次のようなものが動作するかどうかを確認してください。基本的には、作成時に作業者にseq番号を渡すことができます。そうすれば、あなたはそれらに戻ることができます。

import akka.actor.{Props, ActorSystem, Actor} 


object ActorNaming extends App { 

    implicit val actorSys = ActorSystem("NameDemoAS") 

    val master = actorSys.actorOf(Props[Master], "my-name-is-master") 
    master ! "name" 

    (1 to 10).map{ i => actorSys.actorOf(Props[Worker], s"my-name-is-worker-$i")}.map{ actor => actor ! "name"} 

} 


class Master extends Actor { 

    def receive : Receive = { 
    case "name" => println(context.self.path.name) 
    } 
} 

class Worker extends Actor { 
    def receive : Receive = { 
    case "name" => println(context.self.path.name) 
    } 
} 

出力は

my-name-is-master 
my-name-is-worker-1 
my-name-is-worker-2 
my-name-is-worker-7 
my-name-is-worker-3 
my-name-is-worker-4 
my-name-is-worker-8 
my-name-is-worker-5 
my-name-is-worker-6 
my-name-is-worker-9 
my-name-is-worker-10 
+0

あなたの答えをありがとう!確かに動作しますが、私の質問では、私は "私は自分でそれぞれの固有の名前を生成したくありません"と言いました。一意の名前を生成する可能性は無限であり、定型文は実際には重要ではありません。なぜなら、一度だけ書いて再利用するからです。私の質問は、APIによってサポートされているきちんとした方法がない場合でした。 – ale64bit

+0

大丈夫です。名前を生成するためにどのような種類のAPIを見たいかの例(擬似コード)を提供できますか?しかし、このようなものは標準APIの一部であるべきだと思いますか?名前を完全にランダムにしますか? IMOでは、命名はコンテキスト固有のものであり、ドメイン駆動型であることができます。 –

+0

"私は自分ひとりひだり固有の名前を生成したくありません" - これらの俳優を自分で作っているのですか? –

関連する問題