希望有人可以引导我朝着正确的方向发展,以将我的代码转变为更具响应性的服务呼叫。对于后台,我有一个前面的函数,它将生成一个用户列表,然后将使用该列表为列表中的每个用户调用此getUserDetails函数,并返回用户+详细信息的映射或列表。
@HystrixCommand(commandKey = "getUserDetails")
public getUserResponse getUserDetails(userRequest request) {
getUserResponse response = webClient.post()
.uri(uri)
.body(BodyInserters.fromObject(request))
.retrieve()
.onStatus(HttpStatus::isError,resp -> resp.bodyToMono(getUserError.class).map(errorHandler::mapRequestErrors))
.bodyToMono(getUserResponse.class).block();
return response;
}
理想情况下,我也将替换/删除错误映射,仅与记录返回的错误响应并继续有关。 到目前为止,我已经想到了一些类似的方法,但是我不确定webflux / hystrix是否会表现出色?
@HystrixCommand(commandKey = "getUserDetails",fallbackMethod = "getUserFallback")
public Mono<getUserResponse> getUserDetails(userRequest request) {
return = webClient.post()
.uri(uri)
.body(BodyInserters.fromObject(request))
.retrieve()
.bodyToMono(getUserResponse.class);
}
@HystrixCommand
public Mono<getUserResponse> getUserFallback(userRequest request,Throwable throwable) {
log.error(//contents of error message returned)
return mono.empty();
}
public Flux<UserMap> fetchUserDetails(List<Integer> userIds) {
return Flux.fromIterable(userIds)
.parallel()
.runOn(Schedulers.elastic())
.flatMap(userDetailsRepository::getUserDetails);
}