如何并行调用多个http请求(具有重试功能)并等待所有请求完成?

时间:2019-11-18 11:08:42

标签: java spring spring-boot spring-webflux spring-webclient

目前,我的代码如下:

   List<Mono<ResponseEntity<String>>> response = queue.stream()
            .map(req-> webClient
                    .post()
                    .bodyValue(req)
                    .retrieve()
                    .toEntity(String.class)
            )
            .collect(Collectors.toList());

我该如何等待所有答复被接受的那一刻?

如果某些请求失败,我只想重试它们。

我如何实现?

2 个答案:

答案 0 :(得分:1)

最简单,最棘手的解决方案是编写一个代码,该代码发送带有重试的单个请求,并仅在成功完成或超出最大限制后才返回。之后,将该代码包装为Runnable的实现,并使用ExecutorService提交所有代码。将期货收集到集合中,并检查它们何时完成。

答案 1 :(得分:1)

我建议不要使用ExecutorServiceMono的功能,它们提供了更惯用的解决方案:

Flux