栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ServiceStack.Redis:PooledRedisClientManager和RedisManagerPool等待上一请求完成

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ServiceStack.Redis:PooledRedisClientManager和RedisManagerPool等待上一请求完成

我以为PooledRedisClientManager和RedisManagerPool都有客户端池

这句话是真的。

因此能够并行处理多个MQ消息。

这是一个无效的结论,没有上下文就没有意义。池化Redis客户端管理器本身不会执行任何操作,即它们仅管理Redis客户端池,这意味着从池中检索客户端时:

var redis = clientsManager.GetClient();

RedisClient
(连接的客户端至服务器的Redis即单个TCP)从由客户管理器,并且当所述客户端被设置,它返回到池中,而不是TCP连接被终止管理的客户端的一个池检索。

当某事正在使用一个池,客户端管理器不自行执行Redis命令以及应用程序使用它的应用程序所特有的功能时,可以做所有这些假设。他们使用的池是无关紧要的,可以很容易地将它们配置为使用不使用池的BasicRedisClientManager,即应用程序对客户端管理器的使用不会对如何使用它进行任何假设。

在示例项目中,您使用Redis MQ执行ServiceStack服务:

mqHost.RegisterHandler<Hello>(base.ExecuteMessage);mqHost.Start(); //Starts listening for messages

在上一个答案中,您引用了:

创建一个Redis MQ服务器,该服务器在其自己的后台线程上处理每个消息。

完整的评论继续提供一个示例:

i.e. if you register 3 handlers it will create 7 background threads:///   - 1 listening to the Redis MQ Subscription, getting notified of each new message///   - 3x1 Normal InQ for each message handler///   - 3x1 PriorityQ for each message handler (Turn off with DisablePriorityQueues)

这就解释了Redis MQServer如何处理消息,即每种消息类型都是在其自己的后台线程上处理的,因此,如果您阻塞消息工作线程,那么您将阻塞用于阻塞该类型的其他消息的线程(即,请求DTO)。

mqHost.RegisterHandler<Hello>(base.ExecuteMessage);

它不会阻止其他类型的消息在其自己的后台线程或Priority MQ线程上处理,而该类型消息将通过来处理

Priority>0

所述Redis的MQ文档提供了如何可以增加线程的数量的实施例中使用通过指定处理每个消息类型

noOfThreads
注册处理程序时:

轻松并行化和乘以您的服务吞吐量

RedisMqServer还支持为单个请求生成任意数量的后台线程,因此,如果“发布到Twitter”是IO密集型操作,则只需分配2个或更多工作线程即可将吞吐量提高一倍,例如:

mqService.RegisterHandler<PostStatusTwitter>(ExecuteMessage, noOfThreads:2);mqService.RegisterHandler<CallFacebook>(ExecuteMessage);mqService.RegisterHandler<EmailMessage>(ExecuteMessage);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369420.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号