これは設計上の問題です。
一連の処理を行うアクターのツリーがあるとします。処理は、クライアント/接続アクター (つまり、ツリーがサーバー) によって開始されます。最終的に、クライアント アクターは応答を必要とします。つまり、私はこのようなアクター システムを持っています。
ActorA <---reqData--- Client_Actor
| msgA /|\
\|/ |
ActorB |
msgB | \ msgD |
\|/ \/ |
ActorC ActorD---------msgY-->|
|_____________msgX_________|
クライアント システムが必要とする応答は、リーフ アクター (つまりActorC
および/またはActorD
) からの出力です。ツリー内のこれらのアクターは、外部システムと対話している可能性があります。このツリーは、ルーティングされる可能性のある定義済みのアクターのセットである可能性があります (つまりClient_actor
、アクター ツリーのルートへのアクター参照があるだけですActorA
)。
問題は、ファイナル/リーフ アクターからクライアント アクターへの応答 ( msgX
&/or ) の送信を管理するための最適なパターンは何かということです。msgY
次のオプションを考えることができます。
- 接続クライアントごとにツリーを作成し、アクターが送信者を追跡できるようにします。アクターが
msgX
またはを取得したら、msgY
それを元の送信者 ref に送り返し、メッセージがツリーを介して戻されるようにします。つまり、各アクターは元の送信者の参照を保持します。 Client_Actor
何らかの方法でメッセージ内のref を送信し、reqData
これをツリーで使用されるすべてのメッセージに複製して、リーフ アクターが直接応答できるClient_actor
ようにします。これは最もパフォーマンスの高いオプションのようです。これを行う方法がわかりません (クライアント アクター ref を保持するメッセージ ケース クラスで何らかの特性を考えています)...- 何らかの方法で、ツリーを通過したメッセージ内の一意の ID に基づいてクライアント アクターをルックアップするか、actorselection を使用します (これがリモーティングでうまく機能するかどうかはわかりません)...
- より良いなにか...
参考までに、私は Akka 2.2.1 を使用しています。
乾杯!