2016-10-23 10 views
0

私は、1回のPOSTリクエストしか処理しないRESTサービスを持っています。私は要求を処理するために俳優を使いたいです。しかし、私は1人の俳優を作って、この俳優を使ってすべてのリクエストを派生させるべきかどうか、または私がリクエストを受けるたびに俳優を創り出すべきかどうかはわかりません。これらの選択の長所と短所は何ですか? また、1つのアクタを作成し、そのアクタを使用してすべてのリクエストを処理すると、どのようにパラレル実行されますか。確かに逐次実行のようです。私もこれを理解したいと思います。Akkaアクタを作成するタイミング

答えて

1

1つのアクタリクエストは、アクタメールボックス内でキューに入れられ、アクタによって1つずつ処理されます。これは逐次的であり、推薦されません。それは言われている理由

ザッツは

一つの俳優には俳優ではありません。

他のアクタを管理するマネージャを作成します。アクターは非常に安価であるため、問題なくあらゆる要求に対して1つのアクターを作成できます。 db相互作用や他の重い計算を将来的に行い、未来の直接の結果をpipeToパターンを使用して処理する俳優に要求します。

俳優は仕事を分けて配布し、集中的な仕事をするために先物を使うためにだけ使う。

1

@pamuが言ったことに同意します。俳優は安いです。しかし、あなたがシングルトンアクターを使うつもりなら、ステートフルにしてトラブルを引き起こさないように注意してください。

あなたが集中的な仕事をするために先物を使うつもりなら(これはすべきことです)。特定のExecutionContext/Dispatcherを指定してください。グローバルディスパッチャーまたはExecutionContextを使用することは良くありません。

または、それぞれのapiで、その種のエンドポイント/ apiで動作するアクターの数を制御する特定のディスパッチャを作成します。例えば

あなたは「/ /取得取引」

はスレッドだけのこの#を生むだろうディスパッチャを指定しています。このAPIの場合。

この利点は、アプリが使用するスレッド数とリソース数を制御できることです。それは、大量のトラフィックを扱うことになります。これは良い習慣です。

1

リクエストごとにアクタを作成し、「tell」パターンを使用して、新しく作成したアクタに作業を委任します。使用しているRESTフレームワークが別のアクタ(Spray、Akka-HTTPなど)からのリクエストを完了することをサポートしている場合、この新しいアクタからリクエストを完了できます。このようにして、リクエスト処理担当者は次のリクエストを自由に処理できます。

thisは、是非&の賛否両論を説明するすばらしいリソースを見つけます。& tell-per-request-actorsそれはあなたに役立つことがあります。

関連する問題