【发布时间】:2021-01-03 15:21:46
【问题描述】:
您好,我对 WebFlux 和背压有疑问:
Flux.range(0, 100)
.flatMap((Integer y) -> {
return reallySlowApi();
})
.doOnEach((Signal<String> x1) -> {
log("next-------" );
})
.subscribeOn(Schedulers.elastic())
.subscribe()
;
如何将呼叫限制为每 5 秒一次呼叫。注意:只能修改reallySlowApi。
private Mono<String> reallySlowApi() {
return webClient
.get()
.retrieve()
.bodyToMono(String.class);
}
编辑:我知道delayElements,但如果 Api 变得更慢,它不会解决问题。我需要使用reallySlowApi 的最佳方式。
【问题讨论】:
-
这真的取决于你所说的“最佳”是什么意思?如果您希望您的客户最终成功,那么使用退避重试可能是一个不错的选择。如果您想保护下游,您可以查看 ratelimiter 和 Bulkhead 以防止弹性 4j:resilience4j.readme.io/docs/getting-started 但是,您需要提供一些配置,例如并发限制或每秒请求数。
-
你找到解决办法了吗?
-
是和否。不是说我很高兴,但不知何故它起作用了。 .flatMap((Integer y) -> { return reallySlowApi();}, 3) => flatMap(mapper, concurrency)
标签: java spring spring-webflux spring-webclient