我正在尝试使用新的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
答案 0 :(得分:1)
Flux.fromIterable(ids)
.flatMap(id -> webClient.get()
.uri("/comments/{id}", id)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(Comment.class))
.subscribeOn(Schedulers.parallel());