在Play中动态设置CompletionStages的线程池大小!与Akka

时间:2018-03-16 11:00:28

标签: java playframework akka completion-stage

在我的网络应用程序中,我正在使用Play!构建在Akka上用于管理线程的框架。 在特定情况下,我编写了许多从外部服务收集数据的CompletionStages,我想控制并行请求的数量,以免使这些外部服务负担过重。 在不更改整个应用程序的情况下执行此操作的一种方法是控制Akka使用的线程池大小。 现在我在akka中准备了两个线程池,并尝试在两个池之间切换。 我正在使用以下内容编写CompletionStages:

CompletableFuture.completedFuture(firstResult)
                        .thenComposeAsync( firstResult -> { dostuff(firstResult);}

根据Akka的documentation,这是如何设置当前线程池:

// this is scala.concurrent.ExecutionContext
// for use with Futures, Scheduler, etc.
final ExecutionContext ex = system.dispatchers().lookup("my-dispatcher");

通过观察我的应用程序,设置这样的上下文不会影响应用程序,只考虑默认调度程序。有没有办法动态设置Akka中当前池的大小?

1 个答案:

答案 0 :(得分:1)

您需要将自定义Executor传递给thenComposeAsync方法:

final java.util.concurrent.Executor exec = system.dispatchers().lookup("my-dispatcher");

CompletableFuture.completedFuture(firstResult)
                 .thenComposeAsync(firstResult -> {
                   dostuff(firstResult);
                 }, exec);