博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hystrix降级逻辑中如何获取触发的异常
阅读量:6319 次
发布时间:2019-06-22

本文共 1378 字,大约阅读时间需要 4 分钟。

hot3.png

通过之前Spring Cloud系列教程中的一文,我们已经知道如何通过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
{ 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由服务提供方抛出的异常在消费方没能考虑周到,会触发一些意料之外的降级。所以在降级逻辑中,建议每一段都加入触发异常的日志记录,以方便定位问题原因。

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

转载于:https://my.oschina.net/didispace/blog/1861111

你可能感兴趣的文章
在Linux和Windows下删除文件夹中包含的.svn文件的方法
查看>>
终于恢复了珍惜多年的照片
查看>>
深圳美景品牌策划机构:美景、BOBDOG传媒合作论坛广州举行
查看>>
程序员面试资源集锦
查看>>
1. 文件和目录
查看>>
Security+认证备考经验分享(501版本)
查看>>
聊聊redisson的DelayedQueue
查看>>
2015/4/24~GET方式和POST方式传值大小的限制
查看>>
python内置数据结构之str
查看>>
linux3~4
查看>>
java 引用类型
查看>>
【干货分享】流程DEMO-人员调动流程
查看>>
记录一次maven jar包冲突的排查过程
查看>>
LNMP和LAMP的编译安装
查看>>
shell中数值比较 字符串比较 文件判断 whle和for和until循环
查看>>
C# 格式化
查看>>
前端必须会的基本知识题目
查看>>
Git commit message和工作流规范
查看>>
元素的 is_enable()、is_displayed()和is_selected()
查看>>
ffmpeg支持x264插件
查看>>