β

Hystrix降级逻辑中如何获取触发的异常

程序猿DD | 博客 31 阅读

通过之前Spring Cloud系列教程中的 《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》 一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际使用过程中经常碰到开发反应“莫名”触发了降级逻辑的情况。为了更精准的定位触发原因,或是在降级逻辑中需要根据不同的异常做不同的处理时,在降级方法中,我们希望可以获取到主逻辑中抛出的异常信息。接下来就来介绍一下Hystrix两种不同实现方式中如何在降级逻辑中获取异常信息的方法。

注解方式

先介绍一下用注解方式定义的Hystrix命令是如何在降级逻辑中获取异常的,实现非常简单,先看下面的例子:

public static class UserCommand extends HystrixCommand<User> {

protected UserCommand() {
super(HystrixCommandGroupKey.Factory.asKey("UserCommand"));
}

@Override
protected User run() throws Exception {
throw new RuntimeException("getUserById command failed");
}

@Override
protected User getFallback() {
System.out.println(getFailedExecutionException().getMessage());
return new User("def", "def");
}

}

上面的实现同上一节注解方式的实现一样,在使用继承方式的时候通过 getFailedExecutionException 方法就可以获取到触发降级的异常信息了。

总结

我们在实际使用Hystrix的时候,有时候一些业务异常或者内部RPC由服务提供方抛出的异常在消费方没能考虑周到,会触发一些意料之外的降级。所以在降级逻辑中,建议每一段都加入触发异常的日志记录,以方便定位问题原因。

以下专题教程也许您会有兴趣

通过之前Spring Cloud系列教程中的 《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》

作者:程序猿DD | 博客
Dream big, work smart, deliver fast
原文地址:Hystrix降级逻辑中如何获取触发的异常, 感谢原作者分享。

发表评论