2016-06-28 3 views
1

У меня есть интерфейс уровня сервиса, который выглядит следующим образом:Hystrix и пользовательских исключений

public interface MyService { 
    void save(DomainClass domainObject) throws MyServiceException; 
} 

Я использую Hystrix защитить метод реализации:

public class MyServiceImpl implements MyService { 
    @HystrixCommand 
    public void save(DomainClass domainObject) throws MyServiceException { 
     remoteServiceClient.persist(domainObject); 
    } 
} 

Когда remoteServiceClient выходит из строя или тайм-аут, Hystrix бросает HystrixRuntimeException. Но я не хочу, чтобы клиенты службы видели какие-либо связанные с Hystrix исключения (они не должны забывать о деталях реализации услуги, не так ли?). Я хочу выбросить исключенное исключение MyServiceException. Можно ли это сделать? Должен ли я структурировать свою реализацию по-другому?

ответ

0

Кто-то спросил аналогичный вопрос здесь: Get failure exception in @HystrixCommand fallback method

Так что ваш случай может быть реализован как:

public class MyServiceImpl implements MyService { 

    @HystrixCommand(fallbackMethod = "saveFallback") 
    public void save(DomainClass domainObject) throws MyServiceException { 
     remoteServiceClient.persist(domainObject); 
    } 

    @HystrixCommand 
    void saveFallback(Throwable e) { 
     throw new MyServiceException(); 
    } 
} 
0

Использование Hystrix-javanica 1.5.7

Распространение ошибок было нормально настроенную в большей степени это, и исключения по умолчанию не завершаются как исключение HystrixRuntimeException.

Обновлено распространение ошибки:

Если вы реализовали метод резервного и даже это не удается, то исключения брошенного резервным методом будет распространяться на пользователь

//FallbackException and CommandException are user defined 
@HystrixCommand(fallbackMethod = "fall") 
public String getInfo(boolean fail) { 
    throw new CommandException("Command failed....falling back");  
} 

public String fall(boolean fail) { 
     throw new FallbackException("Fallback failed....");  
} 

Здесь в этом случае FallbackException будет выброшен.

Смежные вопросы