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

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

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

如何在Spring Boot 2 WebFlux / WebClient中实现相同的功能?

2个回答

24

你有两个选择:

  1. 使用自定义程序重写 ReactiveWebServerFactory bean,应用事件循环资源配置:

    @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=16环境变量。默认情况下,它的值设置为Math.max(availableProcessors(), 4)。 例如:java -jar your-app.jar -Dreactor.ipc.netty.workerCount=16


reactor.ipc.netty.workerCount在application.properties文件中不起作用。 - Saeed Zarinfam
@SaeedZarinfam,它不应该是属性,而是环境变量。已更新答案以更精确。 - ledniov
4
我收到了 builder.loopResources 未定义的错误。 - user1955934
2
如何验证设置是否正确应用?有没有简单的方法打印出workerCount的数量? - user1955934
嗨,我在想名为“resourceFactory()”的方法名称是否重要?我能用其他名称来实现同样的功能吗? - user1955934

2
事件循环是由Spring项目反应器实现的,所有请求都由事件循环处理,内部使用响应式Netty来处理Web请求。在Boot 2.XX中使用Reactor Netty 0.8或更高版本,相应的系统属性名为reactor.netty.ioWorkerCount,文档中称其为“默认工作线程数”。您可以通过添加VM参数“-Dreactor.netty.ioWorkerCount = 2”来定义事件循环池大小。例如:java -jar your-app.jar -Dreactor.netty.ioWorkerCount=2。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接