【问题标题】:How to set event-loop pool size in Spring Webflux / WebClient?如何在 Spring Webflux / WebClient 中设置事件循环池大小?
【发布时间】:2018-07-14 09:31:29
【问题描述】:

在Vert.X等multi-reactor框架中我们可以设置事件循环线程的数量,例如:

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

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

【问题讨论】:

    标签: java spring spring-boot project-reactor spring-webflux


    【解决方案1】:

    你有两个选择:

    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 文件中不起作用。
    • @SaeedZarinfam 它不应该是环境变量,而不是属性。更新了更准确的答案。
    • 我得到 builder.loopResources 没有定义。
    • 如何验证设置是否正确应用?有没有简单的方法打印出workerCount的数量?
    • 您好,只是想知道方法“resourceFactory()”的名称是否重要?我可以使用不同的名称来实现相同的目标吗?
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 2018-02-24
      • 2022-09-23
      • 2019-04-13
      • 2018-05-09
      • 2019-11-07
      • 2019-12-16
      • 2019-11-23
      • 2017-12-31
      相关资源
      最近更新 更多