使用AKKA中所有用户参与者的自定义调度程序,以避免用于系统参与者的线饥饿



问题是关于akka 2.5.x中的调度程序配置。

我想避免由于系统消息未传递系统消息而导致节点是隔离的线程饥饿问题。为了实现这一目标,我想创建与默认调度程序配置完全相同的单独调度程序。

我已经定义了使用名称my-dispatcher {...}的自定义调度器配置。我可以使用以下内容使Akka使用此调度程序作为所有用户的参与者吗?

akka.actor.deployment {
    "/**" { # <- should this work?
        dispatcher = my-dispatcher
...
}

想法来自文档中的以下示例:

# all direct children of '/user/actorC' have a dedicated dispatcher 
"/actorC/*" {
    dispatcher = my-dispatcher
}

因此,如果我用**替换actorC,它将针对/user下的所有参与者,我希望它能起作用。有人这样做吗?还是我需要找到另一个解决方案?

就我检查的方法而言,它在用户路径下的所有参与者中都覆盖了调度员。

尽管更常规的配置默认调度程序的方法只需覆盖akka.actor.default-dispatcher下的配置中的条目(您只能覆盖其中一些(,例如:

akka {
  actor {
    default-dispatcher {
      fork-join-executor {
        parallelism-min = 2
      }
      throughput = 100
  }
}

如果您在默认情况下使用使用不同路径定义的调度程序,则可以使用my-dispatcher覆盖default-dispatcher节:

akka.actor.default-dispatcher = ${path.to.my-dispatcher}

最新更新