如何记录 hystrix 回退方法调用的原因



我正在使用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);
}
}

发生异常时,可以调用回退方法,但会记录注释。

如何记录触发调用的回退方法的异常?
如连接超时异常。

回退方法可以接受一个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);
}
}

最新更新