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 日志记录即可。
据我所知,要使用 HystrixRequestContext
,MyService
的调用者必须在使用该服务之前调用 HystrixRequestContext.initializeContext()
。太烂了,所以如果有人有更好的主意,我很感兴趣。
从Javanica v1.4.21开始,允许fallback方法有一个Throwable类型的参数来访问命令执行异常,如下所示:
public void fallback(Throwable e) {
// fallback code
LOGGER.error(e.getMessage());
}
要获得此功能,您的构建配置需要覆盖由 Spring Cloud 引入的旧版 Javanica。
我已成功配置 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 日志记录即可。
据我所知,要使用 HystrixRequestContext
,MyService
的调用者必须在使用该服务之前调用 HystrixRequestContext.initializeContext()
。太烂了,所以如果有人有更好的主意,我很感兴趣。
从Javanica v1.4.21开始,允许fallback方法有一个Throwable类型的参数来访问命令执行异常,如下所示:
public void fallback(Throwable e) {
// fallback code
LOGGER.error(e.getMessage());
}
要获得此功能,您的构建配置需要覆盖由 Spring Cloud 引入的旧版 Javanica。