SpringBoot WebFlux-发出并行的WebClient请求

时间:2018-06-30 21:58:52

标签: spring-mvc spring-boot spring-webflux

我正在尝试使用新的SpringBoot 2 Reactive WebClient类(它没有批处理终结点)对同一个rest服务进行并行(批处理)调用。例如,我需要100个“ Comment”对象(ID为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进行并行调用的正确方法

  • 是否有更好(更合适)的方法(例如 Monos的助焊剂)?

  • 此外,当我执行此操作时,我会使用旧的已弃用的AsyncRestTemplate
    ThreadPoolExecutor ...我应该在
    中使用类似的概念吗? WebClient? ...与反应式类似吗?

致谢

完整的源代码可以绑定在:https://github.com/fdlessard/SpringBootReactiveComment

1 个答案:

答案 0 :(得分:1)

Flux.fromIterable(ids)
  .flatMap(id -> webClient.get()
    .uri("/comments/{id}", id)
    .accept(MediaType.APPLICATION_JSON)
    .retrieve()
    .bodyToMono(Comment.class))
  .subscribeOn(Schedulers.parallel());