如何在Spring Webflux / WebClient中设置事件循环池大小?

在 Vert.X 等多反应器框架中,我们可以设置事件循环线程的数量,例如:

final VertxOptions vertxOptions = new VertxOptions();
vertxOptions.setEventLoopPoolSize(16);
final Vertx myVertx = Vertx.vertx(vertxOptions);

如何在Spring Boot 2 WebFlux / WebClient中做等效操作?


答案 1

您有两种选择:

  1. 使用应用事件循环资源配置的定制器覆盖 Bean:ReactiveWebServerFactory

    @Bean
    public ReactiveWebServerFactory reactiveWebServerFactory() {
        NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory();
        factory.addServerCustomizers(builder -> builder.loopResources(LoopResources.create("my-http", 16, true)));
    
        return factory;
    }
    
  2. 或者使用环境变量。默认情况下,其值设置为 。例:-Dreactor.ipc.netty.workerCount=16Math.max(availableProcessors(), 4)java -jar your-app.jar -Dreactor.ipc.netty.workerCount=16


答案 2

事件循环由Spring项目反应堆实现,所有请求都由事件循环处理,内部它使用反应式Netty来处理Web请求。在 Boot 2.XX 中使用 Reactor Netty 0.8 或更高版本时,等效的系统属性被命名为 reactor.netty.ioWorkerCount。记录为“默认工作线程计数”

您可以通过添加以下内容来定义事件循环池大小

VM argument -Dreactor.netty.ioWorkerCount=2

示例:java -jar your-app.jar -Dreactor.netty.ioWorkerCount=2


推荐