增加Spring reactor AsyncTaskExecutor中的线程数

时间:2015-05-04 06:07:55

标签: spring reactor project-reactor

如何在使用线程池时增加线程数 我的代码如下,

@SpringBootApplication
@EnableReactor
public class Application implements CommandLineRunner {
    @Autowired
    private Reactor reactor

    @Bean
    Reactor createReactor(Environment env) {
    return Reactors.reactor()
            .env(env)
            .dispatcher(Environment.THREAD_POOL)
            .get();
    }

添加以下代码并未增加线程数,默认情况下会将其固定为计算机上的核心数。

@Bean
public AsyncTaskExecutor workQueueAsyncTaskExecutor(Environment env) {
    return new WorkQueueAsyncTaskExecutor(env)
        .setName("workQueueExecutor")
        .setBacklog(2048)
        .setThreads(20)
        .setWaitStrategy(new YieldingWaitStrategy());
}

如何设置reactor变量的线程数?

如果我删除createReactor bean,反应堆工作正常,只是默认为RingBuffer单线程。使用该bean和THREAD_POOL的规范,将启动与计算机上的核心数相等的线程。 我只是想看看如何手动增加这个数量......

由于

1 个答案:

答案 0 :(得分:0)

@jbrisbin对gitter,https://gitter.im/reactor/reactor?at=5548f40f52bceea22c3814e0

的回答

为方便起见,答案是为调度程序创建一个bean并从reactor creat bean中引用它

@Bean
Reactor createReactor(Environment env) {
    Reactor r = Reactors.reactor().env(env).dispatcher(createDispatcher()).get();
    return r;
}

@Bean
Dispatcher createDispatcher() {
    Dispatcher d = new WorkQueueDispatcher("multThreadedQueueDispatcher", 20, 2048, null);
    return d;
}