如何在Flux订阅阶段获取发射的原始值并关联对应外部服务响应
Flux元素与外部服务响应映射实现方案
核心实现逻辑是在flatMap内部将原始发射元素和外部调用返回值绑定后再向下游传递,修改后的代码如下:
@Log4j2 @SpringBootApplication class FluxFromIterableAccessFlatMapValue implements CommandLineRunner { @Override public void run(String... args) throws Exception { Flux.just("Red", "White", "Blue"). flatMap(color -> Mono.fromCallable(() -> { // 此处为外部服务调用逻辑 String response = "Return value from external Service call."; // 将原始颜色和响应值绑定成对返回 return Map.entry(color, response); })).subscribeOn(Schedulers.single()) .subscribe(entry -> log.info("产生该响应的元素是:{},响应内容:{}", entry.getKey(), entry.getValue())); } }
可选优化方案
如果你需要更清晰的类型定义,也可以自定义POJO类替代Map.Entry:
// 自定义响应映射类 record ColorResp(String color, String respValue) {} // 对应flatMap内修改为 return new ColorResp(color, response); // subscribe消费时直接取属性即可 .subscribe(resp -> log.info("元素:{},响应:{}", resp.color(), resp.respValue()))
内容的提问来源于stack exchange,提问作者Rajvansh
相关产品推荐
相关产品推荐

