Java 如何构建能够避免嵌套通量块(通量<;通量<;T>;)的反应式体系结构?

Java 如何构建能够避免嵌套通量块(通量<;通量<;T>;)的反应式体系结构?,java,mono,spring-webflux,flux,reactor,Java,Mono,Spring Webflux,Flux,Reactor,我正在尝试构建一个应用程序A(如适配器),它将: 1) 接收带有某个键的POST请求(JSON格式) 2) 它应该以某种方式修改该密钥,并创建对另一个系统B的POST请求 3) 应用程序A应该解析来自应用程序B的响应并修改该响应 4) 在那之后,我的申请表A应该会回复最初的POST请求 @RestController @RequestMapping("/A") public class Controller { @ResponseStatus(HttpStatus.OK) @Po

我正在尝试构建一个应用程序A(如适配器),它将:

1) 接收带有某个键的POST请求(JSON格式)

2) 它应该以某种方式修改该密钥,并创建对另一个系统B的POST请求

3) 应用程序A应该解析来自应用程序B的响应并修改该响应

4) 在那之后,我的申请表A应该会回复最初的POST请求

@RestController
@RequestMapping("/A")
public class Controller {
    @ResponseStatus(HttpStatus.OK)
    @PostMapping(value = "B", consumes = APPLICATION_JSON_VALUE)
    // to return nested Flux is a bad idea here
    private Flux<Flux<Map<String, ResultClass>>> testUpdAcc(@RequestBody Flux<Map<String, SomeClass>> keys) {
        return someMethod(keys);
    }

    // the problem comes here when I will get Flux<Flux<T>> in the return
    public Flux<Flux<Map<String, ResultClass>>> someMethod(Flux<Map<String, SomeClass>> keysFlux) {
        return keysFlux.map(keysMap -> {
                                // do something with keys and create URL
                                // also will batch keys here
                                <...>

                                // for each batch of keys:
                                WebClient.create(hostAndPort)
                                .method(HttpMethod.POST)
                                .uri(url)
                                .body(BodyInserters.fromObject(body))
                                .header(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded")
                                .accept(MediaType.APPLICATION_JSON)
                                .retrieve()
                                .bodyToMono(schema) // response will be parsed into some schema here
                                .retryWhen (// will make a retry mechanism here)

                                // ===== will join all Mono batches into single Flux
                                Flux.concat(...);
                                }
                             );
    }

}

谢谢你的想法 忘了我的问题吧——我们可以很容易地使用“平面地图”而不是“地图”。
这将解决通量内部的通量问题。

尝试像这样压缩所有通量

Flux.zip(flux1,flux2)
它将创建Tuple2,这样您就可以进行flatMap

谢谢,

Vimlesh

直觉上,我会说它应该是Flux someMethod(Flux.or define MyFlux extends Flux)这个Flux到底在做什么?我挠头很久了。谢谢你的提示!
block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor...
Flux.zip(flux1,flux2)