通过之前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
{ - 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由服务提供方抛出的异常在消费方没能考虑周到,会触发一些意料之外的降级。所以在降级逻辑中,建议每一段都加入触发异常的日志记录,以方便定位问题原因。
【本文为专栏作者“翟永超”的原创稿件,转载请通过联系作者获取授权】
文章标题:Hystrix降级逻辑中如何获取触发的异常
分享URL:http://www.shufengxianlan.com/qtweb/news42/124592.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联