надеясь, что кто-то может направить меня в правильном направлении, превратив мой код в более оперативный сервисный вызов. для фона у меня есть предшествующая функция, которая сгенерирует список пользователей, затем будет использовать этот список для вызова этой функции 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);
}