创建Spring支持的actor作为路由

时间:2015-07-08 11:23:52

标签: java spring akka

问题:我想将一个线程池分配给许多进行阻塞调用的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();
}

所有这一切都正常,但我的问题是线程池执行器配置使用的线程数必须在两个地方声明:

  1. 在threadpool-dispatcher配置中
  2. 在路由器代码(numberOfChildren
  3. 通过Akka docs阅读,似乎有一种方法可以根据配置自动创建路由,例如。

    akka.actor.deployment {
      /parent/router1 {
        router = round-robin-pool
        nr-of-instances = 5
      }
    }
    

    然而,这并没有说明应该如何(由谁)创建白痴演员。

    有没有办法

    1. 解释Akka有Spring创建的路线
    2. 或访问上面代码中的thread-pool-executor配置(例如,线程数),并且无需两次指定线程数。

0 个答案:

没有答案