SpringBoot WebFlux - Создание параллельных запросов WebClient - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь сделать параллельные (пакетные) вызовы той же самой службы покоя, используя новый класс SpringBoot 2 Reactive WebClient (у него нет конечной точки пакета). Например, мне нужно 100 объектов «Комментарий» (с идентификаторами 1 ... 100), и я делаю следующие параллельные вызовы:

    List<Mono<Comment>> monos = ids.stream()
            .map(id -> webClient.get()
                    .uri("/comments/{id}", id)
                    .accept(MediaType.APPLICATION_JSON)
                    .retrieve()
                    .bodyToMono(Comment.class))
            .collect(Collectors.toList());

    return Flux.merge(monos);

Я новичок в Spring WebFlux и не уверен, что это правильный способ выполнять параллельные вызовы с WebClient

  • Есть ли лучший (более подходящий) способ сделать это (т.е. Флюс конкат монос)?

  • Кроме того, когда я делаю это, старый устаревший AsyncRestTemplate я использую
    ThreadPoolExecutor ... Должен ли я использовать аналогичную концепцию с
    WebClient? ... Есть ли что-то похожее с реактивным?

Привет

Полный исходный код может быть связан по адресу: https://github.com/fdlessard/SpringBootReactiveComment

1 Ответ

0 голосов
/ 01 июля 2018
Flux.fromIterable(ids)
  .flatMap(id -> webClient.get()
    .uri("/comments/{id}", id)
    .accept(MediaType.APPLICATION_JSON)
    .retrieve()
    .bodyToMono(Comment.class))
  .subscribeOn(Schedulers.parallel());
...