【问题标题】:Hystrix getting access to the current execution state within fallbackHystrix 在回退中访问当前执行状态
【发布时间】:2015-04-04 02:47:30
【问题描述】:

我成功配置了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(),才能使用 RequestVariable 功能。

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

v1.0.0.RC2测试

【问题讨论】:

  • 你试过在com.netflix.hystrix启用DEBUG登录吗?
  • 添加日志可以解决问题 - 现在报告了 longRunning 的完整堆栈跟踪 - 谢谢

标签: spring-cloud hystrix


【解决方案1】:

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

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

【讨论】:

  • 对我来说听起来有点麻烦,如果有更好的方法来记录错误以便更容易找出生产中的问题......
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多