Yudhistira Arya
Yudhistira Arya

Reputation: 3681

How to set event-loop pool size in Spring Webflux / WebClient?

In multi-reactor framework such as Vert.X we can set the number of event-loop threads, e.g.:

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

How to do the equivalent in Spring Boot 2 WebFlux / WebClient?

Upvotes: 18

Views: 17663

Answers (2)

C M Abdullah Khan
C M Abdullah Khan

Reputation: 126

The event loop is implemented by the Spring project reactor, all requests are processed by the event-loop, internally it uses reactive Netty to handle the web requests. In Boot 2.XX uses Reactor Netty 0.8 or higher version, the equivalent system property is named as reactor.netty.ioWorkerCount. which is documented as "Default worker thread count"

you can define event-loop pool size by adding this

VM argument -Dreactor.netty.ioWorkerCount=2

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

Upvotes: 2

ledniov
ledniov

Reputation: 2382

You have two options:

  1. Override ReactiveWebServerFactory bean with a customizer that applies event loop resources config:

    @Bean
    public ReactiveWebServerFactory reactiveWebServerFactory() {
        NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory();
        factory.addServerCustomizers(builder -> builder.loopResources(LoopResources.create("my-http", 16, true)));
    
        return factory;
    }
    
  2. Or use -Dreactor.ipc.netty.workerCount=16 environment variable. By default it's value is set to Math.max(availableProcessors(), 4). Example: java -jar your-app.jar -Dreactor.ipc.netty.workerCount=16

Upvotes: 25

Related Questions