我的助焊剂和单晶如下:
Mono<MyRequest> req = request.bodyToMono(MyRequest.class);
Mono<List<String>> mono1 = req.map(r -> r.getList());;
Flux<Long> flux1 = req.map(r -> r.getVals()) // getVals() return list of Long
.flatMapMany(Flux::fromIterable);
现在对于flux1
中的每个数字,我想调用一个方法,其中params是flux1
中的id和List<String>
中的mono1
的id。像
flux1.flatMap(id -> process(id, mono1))
但是传递和处理相同的mono1
会导致错误Only one connection receive subscriber allowed
。我该如何实现?谢谢!
答案 0 :(得分:1)
由于这两个信息都来自同一来源,因此您可以使用这样的一个管道来运行整个过程,并将两个元素都包装在Tuple
或更好的域对象中,该对象具有更多含义:
Mono<MyRequest> req = // ...
Flux<Tuple2<Long, List<String>>> tuples = req.flatMapMany(r ->
Flux.fromIterable(r.getVals())
.map(id -> Tuples.of(id, r.getList()))
);
// once there, you can map that with your process method like
tuples.map(tup -> process(tup.getT1(), tup.getT2());
请注意,这看起来很不寻常,这基本上来自于您收到的对象的结构。