如何实现Spring Webflux顺序调用多API无需subscribe/block转Flux
解决方案
你不需要手动调用subscribe或block读取结果,直接用响应式流算子将所有接口调用的Mono拼接为Flux返回即可,修改后的实现如下:
private Flux<SeasonsDto> getSeasonsInfo(List<HuntsSeasonsMapping> l2, String seasonsUrl) { return Flux.fromIterable(l2) // 展开每个HuntsSeasonsMapping对应的SeasonsJsonDto列表 .flatMapIterable(s -> huntsSeasonsProcessor.appendSeaosonToJson(s.getSeasonsRef())) // 按顺序调用第三方接口,concatMap保证前一个请求完成才发起下一个 .concatMap(sjdto -> new SeasonsAdapter("http://localhost:8087/") .callToSeasonsAPI(sjdto.getSeasonsRef())); }
说明
- 整个流程完全符合响应式编程规范,无任何阻塞或手动订阅操作
- 如果你不需要严格的调用顺序,想要提升请求吞吐量,可以将
concatMap替换为flatMap,允许并发发起接口调用 - 最终返回的
Flux<SeasonsDto>可直接交给上层使用,比如WebFlux Controller可直接将该Flux作为接口返回值,Spring框架会自动完成订阅和结果输出。
内容的提问来源于stack exchange,提问作者user1111880
相关产品推荐
相关产品推荐

