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。通过这样的简单定义,开发人员就可以很方便的获取触发降级逻辑的异常信息,用作日志记录或者其它复杂的业务逻辑了。

继承方式

在继承方式中要获取触发异常也非常简单,具体如下:

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

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

目录
相关文章
|
6月前
|
安全 NoSQL Java
互联网并发与安全系列教程(01) - 基于Hystrix实现服务隔离与降级
互联网并发与安全系列教程(01) - 基于Hystrix实现服务隔离与降级
28 0
|
4天前
|
监控 负载均衡 数据可视化
SpringCloud - Hystrix断路器-服务熔断与降级和HystrixDashboard
SpringCloud - Hystrix断路器-服务熔断与降级和HystrixDashboard
31 0
|
8月前
|
负载均衡 Java 调度
Hystrix和Sentinel熔断降级设计理念
Hystrix和Sentinel熔断降级设计理念
68 0
|
8月前
|
消息中间件 缓存 NoSQL
Hystrix中Fallback降级机制
Hystrix中Fallback降级机制
91 0
|
10月前
|
监控 应用服务中间件 测试技术
手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级
手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级
|
10月前
|
JavaScript Java
二十二.SpringCloud源码剖析-Hystrix降级
这篇文章是接上一篇《[SpringCloud源码剖析-Hystrix初始化](https://blog.csdn.net/u014494148/article/details/117221635?spm=1001.2014.3001.5501)》,继续完成Hystrix未完成的执行流程
|
10月前
|
缓存 监控 UED
Hystrix/Sentinel 服务降级和服务熔断
Hystrix/Sentinel 服务降级和服务熔断
73 1
|
10月前
|
Java 测试技术
SpringCloud学习(十三):Hystrix的服务降级实现
SpringCloud学习(十三):Hystrix的服务降级实现
113 0
SpringCloud学习(十三):Hystrix的服务降级实现