2016-03-23 7 views
0

プールには複数の俳優がいます。私はこれらの俳優のそれぞれが俳優を創造したいと思っています。問題は、子アクターを作成して参照を保存するときに、プールされたアクターが送信するメッセージをどの子が受け取るのかわからないことです。プールは、smallestMailBoxプールとして作成されました。私はプールされた俳優のコンストラクタで :プールされたAKKAアクタは、自分の子アクタからの送受信のみを保証するにはどうすればよいですか?

documentReaderActor = this.getContext().actorOf(Props.create(DocumentReaderActor.class)); 

これは、子どものです。 私はいくつかのパターンを行います。マスクといくつかのことを言いますが、それらは同じ子供に終わらない。 まず、私はない:私はすべて私が送って行っていた場合(adReceiveとadSendがAkkaDocumentクラスオブジェクトです)

 Future<Object> future = Patterns.ask(documentReaderActor, adSend, 
       timeout); 
    adReceive = (AkkaDocument) Await.result(future, timeout.duration()); 

を::

documentReaderActor.tell(startReading, getSelf()); 

後、私は何度も行う

documentReaderActor.tell(documentDone, getSelf()); 

私はこれらのプールされたアクタのそれぞれが子アクタを作成していますが、毎回同じ子供に行く。プールされた俳優が子どもと話すだけであることをどうすれば保証できますか?

+0

あなたが何を求めているのかよく分かりません。あなたが俳優a、b、cを持っていて、それぞれが正確に1人の子供を持っているならば、a、b、c 'はaと、bはbと、cはcと話します。 –

+0

しかし、彼らはしません。私は俳優Aからメッセージを送ると、それは子供Bに現れるかもしれないことがわかります。これは、特に最後のメッセージで起こるように見えますが、時には他のメッセージでも起こるようです。 – Pat

+0

私は実際に右の俳優のメッセージを受け取ります。スレッドは変更されましたが、俳優は変更されませんでした。これは私が調べなければならない問題を引き起こす。 – Pat

答えて

0

アッカのSmallestMailBoxルータが動作する方法は、それが示すためには、以下のルールに基づいてrouteesの一つにそのActorRefに送信されたメッセージをリダイレクトすることです。

  • は(メッセージを処理していないアイドルrouteeを選びます)空のメールボックスを持つ
  • 任意のリモートrouteeを選んでメールボックス
  • で最も少ない保留メッセージで空のメールボックス
  • ピックrouteeを持つ任意のrouteeを選んで、リモートアクターは以来最低の優先順位、 を検討しています彼らのメールボックスのサイズは不明です

これはあなたのAsksへの応答がそれを作成した同じ俳優に終わることを保証できないということです。

プールを使用する場合は、自分でロールする必要がありますCustom Router

関連する問題