セッションに「セッション化」できるイベントストリームを処理しようとしています。プールの1人のアクターが1つのセッションのすべてのイベントを処理する予定のアクターのプールを使用する予定です(理由はセッション状態を維持する必要があるためです)。これを達成するためには、特定のセッションに割り当てられた特定のアクタのActorRefを保持する必要があります。私が使用して俳優のプールを使用していますただし、:ルータを使用しているときに俳優の参照を取得する
val randomActor = _system.actorOf(Props[SessionProcessorActor].withRouter(RandomPool(100)), name = "RandomPoolActor")
そこで、この場合には、randomActorはないプール内の個々の俳優に、プール全体にActorRefを提供します。どのようにして私は上記のことを達成することができますか?
私が考えることの1つの方法は、プールからのアクタが初期化された後に参照を返すことです(おそらくRandomPoolActor $ abなどのように見えます)。しかし、このメソッドにはいくつかの問題があります。その1つは、tellの代わりにaskパターンを使用しなければならないため、同じセッションのイベントを見逃すことはありません。
これを達成する他の方法はありますか?採用する他のパターン?
優秀 - コメントありがとうございます。これを試してみる - 私が探しているものかもしれない。簡単な質問:これは、手動で終了しない限り、特定のハッシュコードのアクターが実際に永遠にメモリに残っていることを意味しますか?その場合、私はそれらの俳優にいくつかのセッション・ステートを置くと、彼らは記憶を占め続けるでしょうか? –
ここに関連する質問がありますが、こちらも未回答です:http://stackoverflow.com/questions/32075224/consistenthashingpool-in-akka-when-child-of-a-pool-router-terminates –
ルータがルーティングしますhashKeyに基づくメッセージ。メッセージは、そのアクタが終了するか、またはそのアクタが終了しない限り、同じアクタで終了します。その場合、ルートは、アルゴリズムに基づいてその特定のハッシュキーのメッセージを取得する必要がある他のアクタを決定し、ルーティングを開始します。ルータのルートにある状態を追加すると、その状態はアクタが終了するか死ぬまでメモリを占有します。ステートフルなアクターを持つことに間違いはありませんが、アクターが死ぬときの状態を維持する必要がある場合に問題が発生します。そのためにAkkaの永続性を見てみましょう。 – hveiga