如何使用 Spring WebClient 从并行 Web 请求中收集结果?
How to collect results from parallel web requests with Spring WebClient?
我想发送并行网络请求并并行收集结果。 那么我的方法应该return聚合结果。
使用 spring-webflux
和 WebClient
听起来很简单。但是我怎样才能真正汇总结果?
public List<Response> aggregate(List<Object> bodys) {
List<Mono> monos = bodys.stream(body -> send(body)).collect(Collectors.toList());
//TODO how can I get all results in parallel and collect it to a response list?
List<Response> = Flux.merge(monos)...???...collectList(); //pseudeocode
}
private Mono<Response> send(Object body) {
return webClient.post().syncBode(body).bodyToMono(type);
}
重要的是:如果其中一个 monos 以异常结束,其他的仍然应该被执行而不是被中止。
您需要对内部 Monos 应用错误处理:
public Mono<List<Response>> aggregate(List<Object> bodies)
{
return Flux.fromIterable(bodies)
.flatMap(body -> send(body).onErrorResume(e -> Mono.empty()))
.collectList();
}
private Mono<Response> send(Object body)
{
return WEB_CLIENT.post().syncBody(body).retrieve().bodyToMono(Response.class);
}