Spring WebFlux Как получить результат выполнения Flux? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу использовать WebClient в Spring WebFlux для вызова некоторых URL, а затем поставить все моно на поток. когда я вызываю 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!

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете использовать 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));
}
...