Jakub Rutkowski
Jakub Rutkowski

Reputation: 261

Spring WebFlux WebClient resilience and performance

I just test by sample PoC project some blocking / non blocking solutions in simple common scenario.

Scenario:

I have tested current (blocking) Spring boot client (tomcat), Spring Boot 2.0 (netty) with WebFlux - WebClient, Ratpack and Lagom. In each cases I have stressed client application by gatling test simple scenario (100-1000 users / second).

I have tested ratpack and lagom as reference non blocking io servers to compare results to spring boot (blocking and non blocking).

In all cases i have results as expected, except spring boot 2.0 test. Its working only for small load levels but even then with high latency. If load level rises up - all requests are time outed.

WebClient usage :

@RestController
public class NonBlockingClientController {
private WebClient client = WebClient.create("http://localhost:9000");

@GetMapping("/client")
public Mono<String> getData() {
    return client.get()
            .uri("/routing")
            .accept(TEXT_PLAIN)
            .exchange()
            .then(response -> response.bodyToMono(String.class));
}
}

I have no idea what goes wrong or current snapshot version just working that.

All sources published at https://github.com/rutkowskij/blocking-non-blocking-poc

I just created a simple Spring Boot application using spring-boot-starter-webflux with version 2.0.0.BUILD-SNAPSHOT which brings spring-webflux version 5.0.0.BUILD-SNAPSHOT and same for Spring Core, Beans, Context, etc.

Upvotes: 17

Views: 6914

Answers (1)

Jakub Rutkowski
Jakub Rutkowski

Reputation: 261

Issue no longer exists after 5.0 RC4 release. The issue was related to connection pooling in reactor-netty and reactor-core.

I've also tested with Spring Boot 2.0.0.M4 - everything looks fine now.

Details: http://jira.spring.io/browse/SPR-15584

Upvotes: 9

Related Questions