Я хочу отправлять параллельные веб-запросы и собирать результаты также параллельно. Тогда мой метод должен возвращать агрегированные результаты.
Звучит просто, используя 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);
}
Что важно: если один из моноов завершается с исключением, то остальные должны выполняться, а не прерываться.