Akka平衡池,带有可变大小的线池效果



这是我的用例:

我想创建一个大小x的平衡池路由器(x是运行时确定的实例/路由的数量),每个路由器都有自己的专用线程。预计每个路由将执行阻止操作。

AKKA文档解释说,您无法更改平衡池的调度员。这消除了使用固定调度器的选项(这将完全做我需要的东西,每个路由的大小为1的线池)。

来自Akka文档:

平衡池会自动为其路由使用特殊的balincingDispatcher - 无视在Routee Props对象上设置的任何调度程序。这是为了通过所有路由共享同一邮箱实现平衡语义所需的。

虽然无法更改路由使用的调度程序,但可以微调使用的执行者。默认情况下,使用 fork-join-dispatcher ,可以按调度器中的说明进行配置 [aj:我相信这是一个错别字fork-join-executor] 。在期望路由执行阻止操作的情况下

也来自Akka文档的配置示例:

akka.actor.deployment {
  /parent/router10b {
    router = balancing-pool
    nr-of-instances = 5
    pool-dispatcher {
      executor = "thread-pool-executor"
      # allocate exactly 5 threads for this pool
      thread-pool-executor {
        core-pool-size-min = 5
        core-pool-size-max = 5
      }
    }
  }
}

似乎匹配路由数量的池大小的ThreadPool遗嘱执行人,但这是问题:我如何(在运行时)动态(在运行时)设置ThreadPool executor的池大小以匹配数字如果必须在配置中明确设置池大小?

另外,在从配置中提取其路由的执行者时,是否可以创建平衡池(在代码中)?即我不想使用配置来定义路由器,我想使用:

val myRouter = BalancingPool(x).props(Props[Worker])...)

但以某种方式指定使用哪个执行程序(来自config),使用相同的withmailbox()或withdispatcher()

由于平衡调度程序是"驱动的:

也许是这样的东西:

val bp = BalancingPool(instances, routerDispatcher = "pinned-dispatcher")
val myRouter = context.actorOf(Props...)
    .withRouter(bp),
  name = "myRouter")

相关内容

  • 没有找到相关文章

最新更新