Hystrix 在回退中访问当前执行状态

Hystrix getting access to the current execution state within fallback

我已成功配置 spring-cloud(通过 spring-cloud-starter-hystrix)以包装对服务的调用。

一切正常,如下所示:

@Component
public class MyService {

  @HystrixCommand(fallbackMethod = "fallback")
  public void longRunning() {
     // this could fail
  }

  public void fallback() {
    // fallback code
  }
}

我现在的问题是,我想在 longRunning()

中记录一些关于执行错误的统计信息

尝试在回退方法中访问 HystrixRequestLog.getCurrentRequest() 抛出

java.lang.IllegalStateException: HystrixRequestContext.initializeContext() must be called at the beginning of each request before RequestVariable functionality can be used.

我正在寻找一种简单的方法来记录 longRunning 如果回退被调用的异常。

测试 v1.0.0.RC2

要查看堆栈跟踪,您只需在 com.netflix.hystrix 中启用 DEBUG 日志记录即可。

据我所知,要使用 HystrixRequestContextMyService 的调用者必须在使用该服务之前调用 HystrixRequestContext.initializeContext()。太烂了,所以如果有人有更好的主意,我很感兴趣。

从Javanica v1.4.21开始,允许fallback方法有一个Throwable类型的参数来访问命令执行异常,如下所示:

public void fallback(Throwable e) {
   // fallback code
   LOGGER.error(e.getMessage());
}

要获得此功能,您的构建配置需要覆盖由 Spring Cloud 引入的旧版 Javanica。