从hystrix命令

时间:2015-07-07 16:19:59

标签: spring-cloud hystrix

使用@HystrixCommand注释,可以配置一个回退方法,该方法应该在方法失败的情况下运行。

    public Link defaultDogeLink(Account account) {
         return null;
    }

    @HystrixCommand(fallbackMethod = "defaultDogeLink")
    public Link buildDogeLink(Account account) {
         // some code that may throw Runtime Exceptions
    }  

为了记录(在中心类中)使用@HystrixCommand注释的所有方法中抛出的运行时异常,我该怎么办?

我使用的是spring-cloud-netflix而不是vanilla hystrix-javanica。 我正在寻找类似于org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler类(对于Spring的@Async)的东西,我需要在我的应用程序中实现。

在hystrix-core中,HystrixCommand类具有方法getFailedExecutionException(),可以在回退方法中使用该方法来记录异常。有人可能会指出我在使用hystrix-javanica时如何获得此异常?

1 个答案:

答案 0 :(得分:3)

我在hystrix-javanica的单元测试中找到了获取最后执行的hystrix命令的方法:

public Link defaultDogeLink(Account account) {
     LOG.warn("exception occured while building doge link for account " + account, getCommand().getFailedExecutionException());
     return null;
}

@HystrixCommand(fallbackMethod = "defaultDogeLink")
public Link buildDogeLink(Account account) {
     // some code that may throw Runtime Exceptions
}  


private com.netflix.hystrix.HystrixInvokableInfo<?> getCommand() {
    return HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().iterator().next();
}

它比预期的要冗长,但符合我的要求。