【发布时间】:2021-10-25 10:17:26
【问题描述】:
我是响应式编程概念的新手,我正在尝试构建一个服务,将请求并行发送到两个后端服务并结合这些结果。 这两个后端服务具有不同的响应结构,我创建了一个映射器方法将所有这些转换为一个通用的响应结构。
这是我现在拥有的,当两个服务都返回结果时它正在工作。
public Mono<List<Response>> getRecords(String input){
List<Response> response = new ArrayList<>();
Mono<FirstApiResponse> gResp = this.firstWebClient.get().uri(uriBuilder -> uriBuilder
.path("/")
.queryParam("q", input)
.build()).retrieve()
.bodyToMono(FirstApiResponse.class).log()
.timeout(Duration.ofSeconds(50L));
Mono<SecondApiResponse> iResp = this.secondWebClient.get().uri(uriBuilder -> uriBuilder
.path("/search")
.queryParam("term", input)
.build()).retrieve()
.bodyToMono(SecondApiResponse.class).log().timeout(Duration.ofSeconds(50L));
return Mono.zip(firstResp,secResp).map(objects ->{
if(firstResp != null)
response.addAll(Mapper.convert(objects.getT1()));
if(secResp != null);
response.addAll(Mapper.convert(objects.getT2()));
return response;
});
}
public List<Response> convert(FirstApiResponse resp){
////
Mapping to Response object
////
return response;
}
public List<Response> convert(SecondApiResponse resp){
////
Mapping to Response object
////
return response;
}
我不知道这是否是正确的做法。此外,我想以这样一种方式做到这一点,即如果任何此服务有任何错误,那么它仍应返回其他服务的结果。现在它抛出异常,我无法弄清楚如何正确处理它
如何正确处理这些错误?
【问题讨论】:
标签: spring reactive-programming spring-webflux project-reactor spring-webclient