人工智能

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

时间:2010-12-5 17:23:32  作者:IT科技   来源:应用开发  查看:  评论:0
内容摘要:通过之前Spring Cloud系列教程中的《Spring Cloud构建微服务架构:服务容错保护Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的

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

注解方式

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

@HystrixCommand(fallbackMethod = "fallback") User getUserById(String id) {      throw new RuntimeException("getUserById command failed"); } User fallback(String id, Throwable throwable) {      return new User("def", "def"); } 

这里定义了一个主逻辑函数getUserById,主逻辑中会主动抛出一个异常,异常从而触发该主逻辑的降级逻辑中降级函数fallback。重点看fallback函数中的何获***一个传参Throwable throwable。通过这样的取触简单定义,开发人员就可以很方便的获取触发降级逻辑的异常信息,用作日志记录或者其它复杂的业务逻辑了。

继承方式

在继承方式中要获取触发异常也非常简单,云南idc服务商具体如下:

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由服务提供方抛出的异常在消费方没能考虑周到,会触发一些意料之外的降级。所以在降级逻辑中,建议每一段都加入触发异常的日志记录,以方便定位问题原因。

【本文为专栏作者“翟永超”的原创稿件,转载请通过联系作者获取授权】

戳这里,服务器托管看该作者更多好文

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap