【问题标题】:ServiceStack.Redis: One thread pool for all MQ request handlers?ServiceStack.Redis:所有 MQ 请求处理程序的一个线程池?
【发布时间】:2020-05-04 07:09:11
【问题描述】:

previous SO question 中,我询问是否有办法让 RedisMqServer 为所有处理程序/DTO 提供一个共享线程池,而不是每个处理程序至少有一个专用线程。有了很多 Handler,我们就会产生很多线程,每个 Handler 都会受到分配给它的线程数量的限制。

以 100 个处理程序为例,至少有 100 个线程,但每个类型/处理程序一次只能处理 1 个请求(默认情况下)。我预见到特定 DTO 将比其他 DTO 使用更多的情况,但我希望处理程序从公共池中获取线程,而不是通过如下调用锁定一个特定处理程序:

mqService.RegisterHandler<PostStatusTwitter>(ExecuteMessage, noOfThreads:10);

神话回答说

您可以只使用 C# 并将 RegisterHandler 包装在您自己的扩展后面 方法来配置它。

我很想在这里请求一些输入,因为我不确定这会带来什么。我简要回顾了RedisMqServer 代码,但在我看来需要一些重写才能实现我想要的?

【问题讨论】:

  • 链接的答案解释了 Redis MQ 的工作原理,即不是您要求的方式,您需要在其他地方寻找或创建一个按您想要的方式工作的解决方案。我在回答你的问题:“有没有办法增加一般的线程数量,可以用于所有处理程序?”认为您想在不想每次手动指定 noOfThreads 的地方干燥注册 API。
  • 啊,是的,我是在创建一个供所有处理程序使用的池之后,而不是为每个处理程序指定。但后来我有了答案,基本上是“不”。随意在此处添加它作为答案。

标签: c# redis servicestack servicestack.redis


【解决方案1】:

Redis MQ 不支持“一个线程池用于所有 MQ 请求处理程序”。

previous linked answer 解释了Redis MQ 是如何设计的,其中线程数可根据消息类型(即请求 DTO)进行配置。

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2013-02-08
    • 2014-11-16
    • 1970-01-01
    • 2015-03-27
    • 2010-12-15
    • 1970-01-01
    • 2018-01-13
    • 2016-02-11
    相关资源
    最近更新 更多