Java 如何构建能够避免嵌套通量块(通量<;通量<;T>;)的反应式体系结构?
我正在尝试构建一个应用程序A(如适配器),它将: 1) 接收带有某个键的POST请求(JSON格式) 2) 它应该以某种方式修改该密钥,并创建对另一个系统B的POST请求 3) 应用程序A应该解析来自应用程序B的响应并修改该响应 4) 在那之后,我的申请表A应该会回复最初的POST请求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
@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)