Arc*_*ano 3 java reactive-programming project-reactor spring-webflux
与等待运行 Reactor Mono 实例完成的问题类似,但我想在另一个 Mono 中获得理想的结果。这是我的代码。我尝试了具体化解决方案,但没有成功。
@GetMapping("/bounced")
public Mono<Map<String, Object>> bounced(
@RequestHeader("X-B3-Traceid") String traceId,
@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization
) {
final Mono<Map<String, Object>> sample = webClient.get()
.uri("http://sample:8080/")
.header(HttpHeaders.AUTHORIZATION, authorization)
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
final Mono<Map<String, Object>> httpGet = webClient.get()
.uri("http://httpbin.org/get")
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
final Mono<Map<String, Object>> anything = webClient.get()
.uri("http://httpbin.org/anything/foo")
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
/*
Tried this and it does start it up, but it triggers another "download" in the return block.
Mono.when(anything, sample, httpGet)
.subscribe();
.materialize()
.block();
*/
return Mono.just(Map.of("traceFromBounced", traceId,
"anything", anything.block(),
"sample", sample.block(),
"httpGet", httpGet.block()));
Run Code Online (Sandbox Code Playgroud)
根据 @K.Nicholas 的评论,我让它工作了
@GetMapping("/bounced")
public Mono<Map<String, Object>> bounced(
@RequestHeader("X-B3-Traceid") String traceId,
@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization
) {
final Mono<Map<String, Object>> sample = webClient.get()
.uri("http://sample:8080/")
.header(HttpHeaders.AUTHORIZATION, authorization)
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
final Mono<Map<String, Object>> httpGet = webClient.get()
.uri("http://httpbin.org/get")
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
final Mono<Map<String, Object>> anything = webClient.get()
.uri("http://httpbin.org/anything/foo")
.retrieve()
.bodyToMono(new ParameterizedTypeReference<>() {
});
return Mono.zip(anything, sample, httpGet)
.map(t -> Map.of("traceFromBounced", traceId,
"anything", t.getT1(),
"sample", t.getT2(),
"httpGet", t.getT3()));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6520 次 |
| 最近记录: |