Я пытаюсь использовать Hystrix в качестве запасного варианта и хочу, чтобы мой HystrixExecutor возвращал бизнес-исключение, если у меня нет запасного варианта для него. Но его всегда возвращали мне
** ключ + не удавалось, а откат сбой **
Я не хочу, чтобы мой исполнитель возвращал резервный сбой, я хочу вернуть только бросаемый.
Вот мой код Функция
public Mono<R> HystrixExecutor(WebClient.ResponseSpec webClientResponseSpec, RestRequest RestRequest, Class<R> ResponseModel, Publisher<R> fallback) {
Integer timeout = (RestRequest.getTimeOut()!=null) ? RestRequest.getTimeOut() : ServiceTimeouts.DEFAULT_API_TIMEOUT;
return HystrixCommands
.from((webClientCallExecutor(webClientResponseSpec,RestRequest,ResponseModel))) .commandName(CommandKeyGenerator.getCommandKey(RestRequest.getLogTag(),RestRequest.getLoggingActionType().name()))
.groupName(CommandKeyGenerator.getCommandGroupKey(RestRequest.getLogTag()))
.commandProperties(
HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(timeout)
)
.toObservable(obs ->obs.observe().subscribeOn(Schedulers.io())).fallback(
throwable ->
{
return getFallbackResponse(throwable,fallback);
}).toMono();
}
Ниже функция Fallback
private <R> Publisher<R> getFallbackResponse(Throwable t, Publisher<R> fallback) {
if(!fallback.equals(Mono.empty()))
return fallback;
else {
return Mono.error(t);
}
}
public <R> Mono<R> webClientCallExecutor(WebClient.ResponseSpec webClientResponseSpec, RestRequest RestRequest, Class<R> ResponseModel) {
Mono<R> responseModelMono = webClientResponseSpec
.onStatus(HttpStatus::isError,
clientResponse -> {
HttpStatus httpStatus = clientResponse.statusCode();
return Mono.error(
new ExternalApiException(
RestRequest.getLoggingActionType().name() + httpStatus.getReasonPhrase(), httpStatus));
})
.bodyToMono(ResponseModel)
.onErrorResume(throwable -> {
return Mono.error(
new ExternalApiException(
throwable.toString(), HttpStatus.UNPROCESSABLE_ENTITY));
});
}
Может ли кто-нибудь помочь вернуть сюда бросаемый объект?