2017-09-06 5 views
2

AkkaのAskパターンに関する質問があります。Akkaでパターンを聞く

私はアプリケーションからのaskパターンを使用してアクタを呼び出しています。上記と呼ばれている俳優のような第二の俳優呼び出すしかし

(actor1Ref ? msg) mapTo[ResponseMsg] 

:私のアプリケーションは、通常のクラス(ない役者そのもの)である

secondActor ! msg(sender) 

をし、それが実際の応答を返す第二の俳優です以下のように:

originalSender ! responseMsg 

だから、基本的にはそこ間接に関与しているとActor1はACTOR2を呼び出したときにそれが!を使用しています。

私はコードをテストして動作します。しかし、私は上記がこのコードを書く正しい方法であるかどうかはわかりません。

私は常にactor1とactor2の呼び出しの間に?を使用し、結果をpipeToにしようとしますか?または、私は!を中間呼び出しの間に使用しても問題ありません。元の呼び出し元に戻りたい場合は、単に渡す参照にメッセージを送信するだけですか?

+1

ドキュメントによると、ActorRefsは、メッセージの受け渡しによってアクター間で自由に共有できます。詳細はhttp://doc.akka.io/api/akka/2.5/akka/actor/ActorRef.htmlを参照してください。 –

答えて

2

あなたの現在のアプローチは完璧です。実際、アクターとアクター間の通信にはtell!)を使用することが望ましいです。

何かが、それはタイムアウトし、 ActorRefPromiseを埋め、それはまた、リモート処理を通じて到達可能であることが必要なものがある必要があるときを追跡する必要があるため askを使用した場合のパフォーマンスへの影響はあります documentationから。したがって、常にパフォーマンスのために tellを選択し、必要があれば askを選択してください。

[Tell]は、メッセージを送信するのに適した方法です。メッセージを待つブロッキングはありません。これにより、並行性とスケーラビリティの特性が最良になります。

関連する問題