2017-02-28 9 views
0

私は.NETコアにMVCアプリケーションを作成しています。Azureに移行する予定です。 アプリケーションの起動時に、ファイル/ Dbを読み込んでコレクションを作成するサービスを追加しました。 (これは重大な作業であり、繰り返すべきではありません) このサービスは要求によって呼び出され、コレクションの入力とデータによって出力が生成されます。 私は以下のコードを使用してサービスを追加 -AzureにデプロイするとMVCサービスはどのように動作しますか?

services.AddSingleton<IServiceInterface, ServiceObject>(); 

私はそれが複数回のコンストラクタを呼び出さないことが期待しかし、それはすべてのリクエストに応じて、コンストラクタを呼び出しません。

これは問題ですが、より大きな問題は次のとおりです。 要求を並行して処理できるオブジェクトのプールを作成するにはどうすればよいですか? または、複数のリクエストを同時に受け入れるようにこのサービスを設定するにはどうすればよいですか?

あなたはAzureの上で実行されている場合、私は

答えて

0

...確かにMVC /アズールがどのように動作するかの私の理解では、いくつかのギャップがある安全な

を通すように、このサービスを宣言しますいくつかの属性がなければならないと仮定、これは残さなければならない種類のものです。 WebJobs。

Web層で長時間実行されるジョブを実行する際の問題は、リソースの処理要求から離れてしまうことです。エラーがあればどうなりますか?あなたはどのように再試行しますか?

はアズールでは、この代わりのような何かを行うことができます:

  1. Web層は、サービスバスキュー/ストレージキューそのキューを聞い
  2. 連続WebJobがメッセージをピックアップし、それを処理するメッセージを送信します。

このアプローチにはいくつかの良い側面があります。

  1. WebJobsは、Web層の負荷を軽減、全く別のアプリのサービスプランに入れることができます。彼らはまた、独立して拡張することができます。
  2. 連続WebJobはデフォルトで並列実行されます。少なくともService Bus Queuesから、SDKは処理のために一度に8つのメッセージをピックアップし、App Service Planのすべての単一インスタンスでも実行されるため、拡張できます。
  3. 処理中に例外が発生した場合、メッセージはキューから削除されません。 WebJobは処理を再試行します。

サービスバスキューには、メッセージの順序が保証され、メッセージが一度だけ配信されるという利点があります。ストレージ・キューはより安価ですが、これらの保証はありません。このタスクは一度だけ実行する必要があると述べています。そのため、サービスバスがあなたのケースでは良いでしょう。 しかし、の場合、通常、あなたのWebJobが冪等であることを本当に望んでいます。したがって、タスクを完了できない場合でも、安全に再試行できます。

ここでサンプルを見つけることができます:https://github.com/Azure/azure-webjobs-sdk-samples/blob/master/BasicSamples/ServiceBus/Functions.cs

関連する問題