ServiceStack如何处理并发调用
本文关键字:并发 调用 处理 何处理 ServiceStack | 更新日期: 2023-09-27 17:51:11
ServiceStack如何处理并发调用?我正在寻找ConcurrencyMode的等效。
我的WCF服务有这个属性集:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
我需要启用任何在ServiceStack得到它使用多个线程为每个调用?
ServiceStack在每个AppHost上没有可配置的并发模型,它取决于你选择用哪个AppHost来托管ServiceStack服务:
ASP。. NET Host (AppHostBase)
ASP。. NET web主机,ServiceStack 本身不会创建任何新的线程,请求只是在相同的IIS/Nginx/等ASP上处理。. NET HTTP WebWorker处理请求。
HttpListener Self-Host (AppHostHttpListenerBase)
ServiceStack只在调用new AppHost().Start(url)
时在Startup上创建一个新线程。在运行时没有创建新的线程,也就是说,请求是在HttpListener异步回调线程上处理的。
HttpListener LongRunning Self-Host (AppHostHttpListenerLongRunningBase)
这是ServiceStack的另一个Self-Host HttpListener选项,它使用自己的托管ThreadPool来执行请求(释放HttpListener异步回调线程)。ThreadPool的默认poolSize是500 threads,尽管这可以在AppHostHttpListenerLongRunningBase(poolSize)
构造函数中配置。
RedisMQ主机(RedisMqServer)
管理长时间运行任务的一个好选择是将请求委托给Redis MQ主机,它是一个轻量级的MQ服务器,允许您在托管的后台线程中延迟和处理请求。默认情况下,RedisMqServer为每种消息类型(即请求)生成单个后台线程,尽管这是在启动时可配置的,例如:在下例中,2个后台线程用于处理PostTwitter
请求,而每个后台线程仅用于处理CallFacebook
和EmailMessage
请求:
mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);