对Akka中的所有用户参与者使用自定义调度程序,以避免系统参与者的线程不足

时间:2019-07-30 14:56:03

标签: scala 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下的所有参与者为目标,我希望它会起作用。有人这样做吗?还是我需要找到其他解决方案?

1 个答案:

答案 0 :(得分:1)

据我检查您的方法是否有效,它会覆盖 user 路径下所有参与者中的调度程序。

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

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

如果您默认使用在config中用不同路径定义的调度程序,则可以使用default-dispatcher覆盖my-dispatcher部分:

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