Получите бизнес-исключение от Hystrix Wrapper - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь использовать 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));
                });
}

Может ли кто-нибудь помочь вернуть сюда бросаемый объект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...