ServiceStack如何处理并发调用

本文关键字:并发 调用 处理 何处理 ServiceStack | 更新日期: 2023-09-27 17:51:11

ServiceStack如何处理并发调用?我正在寻找ConcurrencyMode的等效。

我的WCF服务有这个属性集:

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]

我需要启用任何在ServiceStack得到它使用多个线程为每个调用?

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请求,而每个后台线程仅用于处理CallFacebookEmailMessage请求:

mq.RegisterHandler<PostTwitter>(ServiceController.ExecuteMessage, noOfThreads:2);
mq.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage);
mq.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);