我是webflux的新手,我想做以下事情:我想用不同的参数值对同一个url发出并行http请求,并在得到第一个非null(非异常)结果时停止。下面我就来举个例子https://www.baeldung.com/spring-webclient-simultaneous-calls 但当我得到结果时,我不知道如何停止。有人能帮我吗?目前我有这样的想法:
RetrySpec retrySpec = Retry.max(3);
return webClient.get().uri("/getMyObject/{id}", id)
.retrieve()
.bodyToMono(MyObject.class)
.retryWhen(retrySpec);
}
public Flux<> getMyObjs(List<String> ids) {
return Flux.fromIterable(ids)
.parallel(Runtime.getRuntime().availableProcessors())
.runOn()
.flatMap(this::getMyObject)
.;//// Stop when I get first non exceptional value
}
1条答案
按热度按时间i86rm4rw1#
在flux中尝试next()操作符。
参考文献:https://projectreactor.io/docs/core/release/api/reactor/core/publisher/flux.html#next--
但是,也要检查firstwithsignal和firstwithvalue操作符。https://projectreactor.io/docs/core/release/api/reactor/core/publisher/flux.html#firstwithsignal-java.lang.iterable语言-https://projectreactor.io/docs/core/release/api/reactor/core/publisher/flux.html#firstwithvalue-java.lang.iterable语言-
当我遇到这样的问题时,通常我会检查文档,从fluxapi中找到合适的操作符。