通过之前SpringCloud系列教程的《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道了如何使用Hystrix来保护我们的服务不被外部依赖方拖累。但是在实际使用中,经常会遇到开发响应“莫名其妙”触发降级逻辑的情况。为了更准确的定位触发原因,或者在降级逻辑中需要对不同的异常进行不同的处理时,在降级方法中,我们希望获取主逻辑中抛出的异常信息。接下来介绍一下在Hystrix的两种不同实现中如何在降级逻辑中获取异常信息。注解方法首先介绍注解方法中定义的Hystrix命令在降级逻辑中是如何获取异常的。实现非常简单。我们先看下面的例子:@HystrixCommand(fallbackMethod="fallback")UsergetUserById(Stringid){thrownewRuntimeException("getUserByIdcommandfailed");}Userfallback(Stringid,Throwablethrowable){returnnewUser("def","def");}这里,定义了一个主逻辑函数getUserById,在主逻辑中会主动抛出异常,从而触发主逻辑fallback的降级函数。重点关注fallback函数中传入的最后一个参数Throwablethrowable。通过这样一个简单的定义,开发者可以很容易的获取到触发降级逻辑的异常信息,用于日志记录或者其他复杂的业务逻辑。继承模式在继承模式下获取触发异常也很简单,如下:("getUserByIdcommandfailed");}@OverrideprotectedUsergetFallback(){System.out.println(getFailedExecutionException().getMessage());returnnewUser("def","def");}}上面的实现同上一节中的注解方法。使用继承方式时,可以通过getFailedExecutionException方法获取触发降级的异常信息。小结我们在实际使用Hystrix的时候,有时候服务提供者抛出的一些业务异常或者内部RPC异常在消费者端没有考虑周到,就会触发一些意想不到的降级。因此,在降级逻辑中,建议在每个section中添加触发异常的日志记录,方便定位问题原因。【本文为专栏作家“翟永超”原创稿件,转载请联系作者获得授权】点此查看该作者更多好文
