Reputation: 3681
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
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
Reputation: 2382
You have two options:
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;
}
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