如何ServiceStack处理并发呼叫? 我正在寻找在WCF ConcurrencyMode.Multiple的等价物。
我的WCF服务已将此属性设置:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
我需要能够在任何ServiceStack得到它使用多个线程每个呼叫?
ServiceStack没有每一个APPHOST配置并发模型,它是取决于您选择与托管您ServiceStack服务APPHOST:
ASP.NET主机(AppHostBase)
对于ASP.NET Web主机,ServiceStack 不会产生任何新的线程本身的要求只是在同一个IIS处理/ Nginx的/ ASP.NET等HTTP WebWorker处理该请求。
HttpListener自主机(AppHostHttpListenerBase)
ServiceStack只有当你调用在启动时创建一个新线程new AppHost().Start(url)
有在运行时创建新的线程,即请求的异步HttpListener回调线程处理。
HttpListener长时间运行的自托管(AppHostHttpListenerLongRunningBase)
这又是一个自我主机HttpListener选项ServiceStack使用它自己的管理线程池来执行的(免费-ING了HttpListener异步回调线程)的请求。 线程池的默认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);