Резервный метод может принимать дополнительный аргумент типа Throwable
, который будет указывать причину.
Например, если ваш метод подобен этому
@HystrixCommand(fallbackMethod = "fallbackMethod")
public String mainMethod(String s) {
.....
}
Ваш запасной метод может быть таким:
public String fallbackMethod(String s) {
......
}
или
public String fallbackMethod(String s, Throwable throwable) {
//log the cause using throwable instance
......
}
Inваш случай использовать второй.
РЕДАКТИРОВАТЬ:
Если вы используете HystrixFeign
, это то, как вы это делаете.Вы должны использовать FallbackFactory
@Component
public class FooServiceFallbackFactory implements FallbackFactory<FooService> {
@Override
public FooService create(Throwable throwable) {
return new FooServiceFallback(throwable);
}
}
Ваш резервный класс будет выглядеть как
@Component
public class FooServiceFallback implements FooService {
private final Throwable cause;
public FooServiceFallback(Throwable cause) {
this.cause = cause;
}
@Override
Foo queryFoo(Integer fooId) {
//You have access to cause now, which will have the real exception thrown
}
}
Также вам нужно немного изменить свой класс конфигурации
@Configuration
public class FooServiceConfiguration {
@Bean
public FooService() {
return HystrixFeign.builder().[...].target(FooService.class, "http://xxx", FooServiceFallbackFactory.class);
}
}