gpt4 book ai didi

spring-boot - Webflux 并行连接以某种方式限制为 256

转载 作者:行者123 更新时间:2023-12-04 01:52:50 25 4
gpt4 key购买 nike

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

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));
}

这两件事都在netty上运行。也许有人知道是什么导致了这种行为?

最佳答案

这不是由于 WebClient关于连接池的限制,但这实际上来自您可以更改的 Reactor 实现细节。

默认情况下,Reactor 运算符,例如 flatMapprefetch=32 (在最终订阅者要求之前我们要求的元素数量)和 maxConcurrency=256 (运算符(operator)同时处理的最大元素数)。

您可以使用 Flux.flatMap(Function mapper, int concurrency, int prefetch) 的变体改变这种行为。

您的代码片段混合使用了 subscribeOnpublishOn ;我想说的是,鉴于您正在使用此代码片段进行响应式 I/O 工作,您不应该尝试在弹性/并行调度程序上安排工作。最好在此处删除这些运算符。

关于spring-boot - Webflux 并行连接以某种方式限制为 256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com