有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用SpringWebClient从并行web请求中收集结果?

我想发送并行的web请求,并同时收集结果。 然后我的方法应该返回聚合结果

使用spring-webfluxWebClient听起来很简单。但我怎样才能真正地汇总结果呢

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应该被执行,而不是被中止


共 (1) 个答案

  1. # 1 楼答案

    您需要在内部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);
    }