В своем веб-приложении я использую Play! фреймворк, основанный на Akka для управления потоками. В конкретном случае, когда я составляю много CompletionStages, которые собирают данные от внешних служб, я хочу контролировать количество параллельных запросов, чтобы не перегружать эти внешние службы. Один из способов сделать это без изменения всего приложения - контролировать размер пула потоков, который использует Akka. Теперь я подготовил два пула потоков в akka like и попытался переключиться между двумя пулами. Я составляю свои CompletionStages, используя что-то вроде этого:
CompletableFuture.completedFuture(firstResult)
.thenComposeAsync( firstResult -> { dostuff(firstResult);}
Согласно Akka документация, вот как установить текущий пул потоков:
// this is scala.concurrent.ExecutionContext
// for use with Futures, Scheduler, etc.
final ExecutionContext ex = system.dispatchers().lookup("my-dispatcher");
Наблюдая за моим приложением, установка такого контекста не влияет на приложение, и рассматривается только диспетчер по умолчанию. Есть ли способ динамически установить размер текущего пула в Akka?




Вам необходимо передать свой собственный Executor методу thenComposeAsync:
final java.util.concurrent.Executor exec = system.dispatchers().lookup("my-dispatcher");
CompletableFuture.completedFuture(firstResult)
.thenComposeAsync(firstResult -> {
dostuff(firstResult);
}, exec);