ServiceStackには、AppHostごとに構成可能な同時実行モデルがありません。これは、ServiceStackサービスをホストするために選択したAppHostに依存します。
ASP.NETホスト(AppHostBase)
ASP.NET Webホストの場合、ServiceStack自体は新しいスレッドを作成せず、要求は、要求を処理するのと同じIIS / Nginx / etc ASP.NETHTTPWebWorkerで処理されるだけです。
HttpListenerセルフホスト(AppHostHttpListenerBase)
ServiceStackは、を呼び出したときにのみ、起動new AppHost().Start(url)
時に新しいスレッドを作成します。実行時に作成される新しいスレッドはありません。つまり、リクエストはHttpListener非同期コールバックスレッドで処理されます。
HttpListener長期実行セルフホスト(AppHostHttpListenerLongRunningBase)
これは、独自のマネージドThreadPoolを使用してリクエストを実行するServiceStackのもう1つのセルフホストHttpListenerオプションです(HttpListener非同期コールバックスレッドを解放します)。ThreadPoolのデフォルトのpoolSizeは500スレッドですが、これはAppHostHttpListenerLongRunningBase(poolSize)
コンストラクターで構成可能です。
RedisMQホスト(RedisMqServer)
長時間実行されるタスクを管理するための適切なオプションは、軽量のMQサーバーであるRedis MQホストに要求を委任することです。これにより、管理されたバックグラウンドスレッドで要求を延期して処理できます。デフォルトでは、RedisMqServerはメッセージタイプ(つまりリクエスト)ごとに単一のバックグラウンドスレッドを生成しますが、これは起動時に構成可能です。たとえば、以下の例では、リクエストの処理に2つのバックグラウンドスレッドが使用されPostTwitter
、それぞれ1つのバックグラウンドスレッドのみが使用されます。処理CallFacebook
およびEmailMessage
要求するには:
mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);