6

実行中のシステムプロセスへのアクセスを制御するためにAkkaを使用しています。

システム内の任意のアクターからの着信コマンドリクエストを処理する単一のCommandActorがあり(これをRequestActorと呼びます)、新しいリクエストごとに、CommandActorはその特定のリクエストを処理するために個別のCmdChildWorkerアクターを生成します。CommandActorはまた、CmdChildWorkersの数を制限し、各リクエストに一意のIDを割り当てるため、単純なルーターよりも複雑です。

コマンドが完了すると、システムプロセスの実行中に定期的に、CmdChildWorkerアクターは定期的な更新を元のRequestActorに送り返します(たとえば、これまでのプロセス出力)。

ただし、すっきりとしたデザインを維持するために、CmdChildWorkerを元のRequestActorから完全に非表示にして、単一のCommandActorへのインターフェイスのみを使用できるようにしたいと考えていました。

もちろん、CommandActorを介してCmdChildWorkerから返信メッセージを送り返すことはできますが、CommandActorを介してメッセージをルーティングすることなく、CmdChildWorkerから直接RequestActorに返信できるかどうか疑問に思っていましたが、それでもメッセージのふりをしています。 CommandActorから返送されました。

つまり、CmdChildWorkerアクターの送信者アドレスを、その親アクターのアドレスになりすますことができます。これは可能ですか?そして、おそらくもっと重要なのは、この賢明な、または優れた俳優のデザインですか?

ありがとう

4

2 に答える 2

10

tellアクターのメソッドを参照してください。CommandActor がそのメッセージを転送するとき、以下を呼び出します。

childActor.tell(msg, sender)

childActor はその送信者を元の送信者として持ちます。

于 2012-11-05T22:04:58.277 に答える
4

私があなたの要求を正しく理解しているなら、あなたは forward を使うべきです。ドキュメントから:

あるアクターから別のアクターにメッセージを転送できます。これは、メッセージが「メディエーター」を通過しても、元の送信者アドレス/参照が維持されることを意味します。これは、ルーター、ロードバランサー、レプリケーターなどとして機能するアクターを作成するときに役立ちます。

myActor.forward(メッセージ)

于 2012-11-06T15:19:23.780 に答える