我正在使用Fiegn创建一个REST客户端。我的调用工作正常,但我想记录调用后备方法的异常情况 像这样的代码:
public interface FooService {
Foo queryFoo(Integer fooId);
}
public interface FooServiceFallback implements FooService {
@Override
Foo queryFoo(Integer fooId) {
return new Foo();
}
}
@Configuration
public class FooServiceConfiguration {
@Bean
public FooService() {
return HystrixFeign.builder().[...].target(FooService.class, "http://xxx", FooServiceFallback.class);
}
}
发生异常时可以调用fallback方法,但会记录注释。
如何记录触发调用回退方法的异常?
像connectionTimeoutException一样。
答案 0 :(得分:1)
Fallback方法可以采用类型为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
......
}
在你的情况下使用第二个。
编辑:
如果您使用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);
}
}