Spring boot Webflux并行连接以某种方式限制为256个

Spring boot Webflux并行连接以某种方式限制为256个,spring-boot,netty,spring-webflux,Spring Boot,Netty,Spring Webflux,我有一个简单的服务器和客户端设置: Flux.range(1, 5000) .subscribeOn(Schedulers.parallel()) .flatMap(i -> WebClient.create() .method(HttpMethod.POST) .uri("http://localhost:8080/test") .body(Mono.just(String.value

我有一个简单的服务器和客户端设置:

Flux.range(1, 5000)
        .subscribeOn(Schedulers.parallel())
        .flatMap(i -> WebClient.create()
            .method(HttpMethod.POST)
            .uri("http://localhost:8080/test")
            .body(Mono.just(String.valueOf(i)), String.class)
            .exchange())
        .publishOn(Schedulers.parallel())
        .subscribe(response ->
            response.bodyToMono(String.class)
                .publishOn(Schedulers.elastic())
                .subscribe(body -> log.info("{}", body)));
以下是客户:

@PostMapping
public Mono<String> test(@RequestBody Mono<String> body) {
    return body.delayElement(Duration.ofSeconds(5));
}
@PostMapping
公共单体测试(@RequestBody单体){
返回body.delayElement(持续时间为秒(5));
}

这两件事都很棘手。也许有人知道是什么导致了这种行为?

这并不是因为
WebClient对连接池的限制,但这实际上来自一个可以更改的反应器实现细节

默认情况下,反应器操作符(如
flatMap
)具有
prefetch=32
(我们在最终订户请求之前请求的元素数)和
maxConcurrency=256
(操作符并发处理的最大元素数)

您可以使用Flux.flatMap(函数映射器、int并发、int预取)
的变体来更改该行为


您的代码片段混合使用了
subscribeOn
publishOn
;我要说的是,鉴于您正在使用此代码段进行反应式I/O工作,您不应该尝试在弹性/并行调度器上安排工作。删除这些操作符在这里是最好的。

谢谢,伙计,我想我应该在做其他事情时离开http nio线程。