问题:我想将一个线程池分配给许多进行阻塞调用的actor(例如,对Web服务,数据库等)。
我有以下配置:
threadpool-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
core-pool-size-min = 4
core-pool-size-max = 8
}
}
以及我的路由器演员的以下设置方法:
private final int numberOfChildren = 4;
@Override
public void preStart() throws Exception {
log.info("Starting up.. creating {} children", numberOfChildren);
List<Routee> routees = new ArrayList<>();
for (int i = 0; i < numberOfChildren; i++) {
ActorRef actor = getContext().actorOf(springActorExtension.props(routeeClass)
.withDispatcher(THREADPOOL_DISPATCHER));
getContext().watch(actor);
routees.add(new ActorRefRoutee(actor));
}
router = new Router(new SmallestMailboxRoutingLogic(), routees);
super.preStart();
}
SpringActorExtension类似于呈现的代码here,它只使用Class对象而不是名称。
路由由Spring最终创建,例如:
@Bean
@Scope(value = "prototype")
public HttpClientActor httpClient() {
return new HttpClientActor();
}
所有这一切都正常,但我的问题是线程池执行器配置使用的线程数必须在两个地方声明:
numberOfChildren
)通过Akka docs阅读,似乎有一种方法可以根据配置自动创建路由,例如。
akka.actor.deployment {
/parent/router1 {
router = round-robin-pool
nr-of-instances = 5
}
}
然而,这并没有说明应该如何(由谁)创建白痴演员。
有没有办法
thread-pool-executor
配置(例如,线程数),并且无需两次指定线程数。