ServiceStack 没有每个 AppHost 的可配置并发模型,它取决于您选择托管 ServiceStack 服务的 AppHost:
ASP.NET 主机 (AppHostBase)
对于 ASP.NET Web 主机,ServiceStack本身不会创建任何新线程,请求只是在处理请求的同一 IIS/Nginx/etc ASP.NET HTTP WebWorker 上处理。
HttpListener 自宿主 (AppHostHttpListenerBase)
ServiceStack 仅在您调用时在Startup上创建一个新线程new AppHost().Start(url)
。在运行时没有创建新线程,即请求在 HttpListener 异步回调线程上处理。
HttpListener 长时间运行的自主机 (AppHostHttpListenerLongRunningBase)
这是 ServiceStack 的另一个自托管 HttpListener 选项,它使用自己的托管线程池来执行请求(释放 HttpListener 异步回调线程)。ThreadPool 的默认 poolSize 是500 个线程,尽管这可以在AppHostHttpListenerLongRunningBase(poolSize)
构造函数中配置。
RedisMQ 主机 (RedisMqServer)
管理长时间运行的任务的一个不错的选择是将请求委托给Redis MQ 主机,它是一个轻量级 MQ 服务器,允许您在托管后台线程中延迟和处理请求。默认情况下,RedisMqServer 为每种消息类型(即请求)生成一个后台线程,尽管这可以在启动时进行配置,例如:在下面的示例中,使用2 个后台线程来处理PostTwitter
请求,而每个后台线程仅使用 1 个处理CallFacebook
和EmailMessage
请求:
mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);