Java 如何更改Akka路由器的大小?

Java 如何更改Akka路由器的大小?,java,resize,akka,router,Java,Resize,Akka,Router,我有一个像这样的Akka路由器: ActorRef router = getContext().actorOf( new RoundRobinPool(instancecount) .props(Props.create(Node.class, po)), po.getUID()); 然后我想更改路由器instancecount。我该怎么办?我认为一个重定器可以让你的路由器池灵活处理突发负载。如果您想通过编程的方式设置一个带有大小调整器的路由器,那么看起来应该是这样的(

我有一个像这样的Akka路由器:

ActorRef router = getContext().actorOf(
    new RoundRobinPool(instancecount)
        .props(Props.create(Node.class, po)), po.getUID());

然后我想更改路由器
instancecount
。我该怎么办?

我认为一个
重定器可以让你的路由器池灵活处理突发负载。如果您想通过编程的方式设置一个带有大小调整器的路由器,那么看起来应该是这样的(取自上的Akka示例)
文件):

在本例中,池将以2个路由开始,但可以根据通过路由器池头的消息量扩展到15个。您也可以直接从akka配置中执行此操作。如果您有这样的配置(同样来自Akka文档):

然后,您可以这样设置池以利用配置:

val router = system.actorOf(Props[ExampleActor].withRouter(FromConfig()), "myrouter2")

查看我链接到的文档,了解有关如何为池设置大小调整器的更多信息。希望这是一个能够满足您需求的解决方案。

为什么要在创建后对其进行更改?因为我想通过使用控制页来修改路由器的大小,并且在生产环境中会不时对其进行修改,但最有可能的是,正在将路由器的大小与可用内核的数量相匹配。这是不太可能改变的。我不认为这是容易做到的。我想你必须停止旧的路由器,用上面的代码片段创建一个新的。但您可以使用一条消息来实现这一点:-)您需要考虑哪些类型的情况会导致您调整路由器的大小。如果您需要弹性来处理偶尔的负载突发,那么只需配置适当的
大小调整器
,在需要时上下调整池大小即可。如果您需要对设置进行永久性更改,则只需更改服务器的配置并循环重新启动(假设您的基础结构具有高可用性)。不要为可能最好使用Akka提供的现有功能/配置来处理的东西发明代码。保持简单。谢谢你的帮助。如何使用调整器?你能给我一个样品吗?我在Akka API中找不到样本。谢谢。在您的示例中,您在创建路由器池时使用了大小调整器,但我想在创建后对其进行更改,并且我不知道创建路由器池时的上限,因此是否有其他方法更改路由器池的大小?或者我们可以在创建后更改大小调整器的上限吗?
akka.actor.deployment {
  /myrouter2 {
    router = round-robin
    resizer {
      lower-bound = 2
      upper-bound = 15
    }
  }
}
val router = system.actorOf(Props[ExampleActor].withRouter(FromConfig()), "myrouter2")