0

我想在 Spring WebFlux 中使用 WebClient 来调用一些 url,然后将所有的 monos 放到 Flux 中。当我调用 Flux.blockLast 时,我无法得到结果。

    @Test
    public void reactiveGetTest() {
        long start = System.currentTimeMillis();
        List<String> results = new ArrayList<>();
        List<Mono<String>> monos = IntStream.range(0, 500)
                .boxed()
                .map(i -> reactiveGet("https://www.google.com/"))
                .collect(Collectors.toList());
        Flux.mergeSequential(monos)
                .map(results::add)
                .blockLast();
        System.out.println("result: " + results.size());
        System.out.println("total time: " + (System.currentTimeMillis() - start));
    }
    private Mono<String> reactiveGet(String url) {
        return WebClient.create(url)
                .get()
                .retrieve()
                .bodyToMono(String.class);
    }

我想得到一个大小为 500 的列表,但为 0!

4

1 回答 1

0

您可以使用Flux.collectList()来获取列表中的所有结果:

@Test
public void reactiveGetTest() {
    long start = System.currentTimeMillis();
    List<Mono<String>> monos = IntStream.range(0, 500)
            .boxed()
            .map(i -> reactiveGet("https://www.google.com/"))
            .collect(Collectors.toList());
    List<String> results = Flux.mergeSequential(monos).collectList().block();
    System.out.println("result: " + results.size());
    System.out.println("total time: " + (System.currentTimeMillis() - start));
}
于 2019-05-09T15:24:17.803 回答