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

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

  • Spring Boot基础教程
  • Spring Cloud基础教程

money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂生存36计

本文授权转载自公众号“算法圈的小破事”&#xff0c;点击以上卡片进行关注大家好&#xff0c;我是在互联网危险边缘疯狂试探的皮皮虾。互联网大厂就像一座围城&#xff0c;外面人想进去&#xff0c;里面的人想出去。里面的人说又累又不好混&#xff0c;外面的人觉得里面的人舒…

开源开放 | 多模态地球科学知识图谱GAKG

OpenKG地址&#xff1a;http://openkg.cn/dataset/gakg网站地址&#xff1a;https://gakg.acemap.info/论文地址&#xff1a;https://dl.acm.org/doi/10.1145/3459637.3482003开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;王新…

LeetCode 468. 验证IP地址

1. 题目 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。 IPv4 地址由十进制数和点来表示&#xff0c;每个地址包含4个十进制数&#xff0c;其范围为 0 - 255&#xff0c; 用(".")分割。比如&#xff0c;172.16.254.1&#xff1b; 同时&#xff…

Spring Cloud Config采用数据库存储配置内容【Edgware+】

在之前的《Spring Cloud构建微服务架构&#xff1a;分布式配置中心》一文中&#xff0c;我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储。这一设计巧妙的利用Git自身机制以及其他具有丰富功能的Git服务端产品&#xff0c;让Spring Cloud Server在配置存…

颤抖吧,打工人!深信服推出员工离职倾向、工作摸鱼监测系统!

文 | 金磊 杨净&#xff08;发自凹非寺&#xff09;源 | 量子位前脚投简历&#xff0c;后脚就被精准裁员。一位网友最近就爆出了这样一段真实经历&#xff0c;而且还称被领导教育了一通&#xff1a;别以为你上班干啥我都不知道&#xff0c;你啥时候想走我都一清二楚&#xff01…

征稿 | “知识图谱赋能的知识工程:理论、技术与系统”专题投稿截止时间延长至2022年7月25日...

转载公众号 | 计算机科学编辑部征稿“知识图谱赋能的知识工程&#xff1a;理论、技术与系统”专题知识图谱&#xff08;Knowledge Graph&#xff09;方法与技术是人工智能在知识工程领域发展的最新前沿。知识图谱正在“感知智能”迈向“认知智能”的过程中扮演着重要角色。近年…

LeetCode 93. 复原IP地址(回溯)

1. 题目 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 示例: 输入: "25525511135" 输出: ["255.255.11.135", "255.255.111.35"]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;http…

为什么回归问题用MSE?

文 | Matrix.小泽直树最近在看李沐的实用机器学习课程&#xff0c;讲到regression问题的loss的时候有弹幕问&#xff1a;“为什么要平方&#xff1f;”如果是几年前学生问我这个问题&#xff0c;我会回答&#xff1a;“因为做回归的时候的我们的残差有正有负&#xff0c;取个平…

Spring Cloud Config Server迁移节点或容器化带来的问题

如果您跟我一样&#xff0c;目前正在使用Spring Cloud Config做为配置中心的话&#xff0c;本篇将来要描述的问题&#xff0c;强烈推荐了解和关注&#xff01;因为这个问题目前存在于所有的版本中&#xff0c;还没有完全修复。 问题现象 为了说明下面的内容&#xff0c;我们可…

开源开放 | 面向家庭常见疾病的知识图谱(东南大学)

OpenKG地址&#xff1a;http://openkg.cn/dataset/medicalgraph开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;东南大学&#xff08;王之畅&#xff0c;罗卓彦&#xff0c;朱启鹏&#xff0c;朱浩嘉&#xff0c;王湘源&#xf…

我不看好data2vec这类多模态融合的研究

文 | 谢凌曦知乎作者注&#xff1a;所有内容均只代表作者本人观点&#xff0c;均有可能被推翻&#xff0c;二次转载务必连同声明一起转载。谢谢&#xff01;最近data2vec在twitter和知乎上小火了一把&#xff0c;有人说data2vec是个不错的工作&#xff0c;也有人说data2vec最成…

LeetCode 165. 比较版本号

1. 题目 比较两个版本号 version1 和 version2。 如果 version1 > version2 返回 1&#xff0c;如果 version1 < version2 返回 -1&#xff0c; 除此之外返回 0。 你可以假设版本字符串非空&#xff0c;并且只包含数字和 . 字符。 . 字符不代表小数点&#xff0c;而是…

会议交流 | 第十六届全国知识图谱与语义计算大会 (CCKS2022)

点击阅读原文&#xff0c;进入 CCKS2022 注册页面。OpenKGOpenKG&#xff08;中文开放知识图谱&#xff09;旨在推动以中文为核心的知识图谱数据的开放、互联及众包&#xff0c;并促进知识图谱算法、工具及平台的开源开放。

Spring Cloud Config对特殊字符加密的处理

之前写过一篇关于配置中心对配置内容加密解密的介绍&#xff1a;《Spring Cloud构建微服务架构&#xff1a;分布式配置中心&#xff08;加密解密&#xff09;》。在这篇文章中&#xff0c;存在一个问题&#xff1a;当被加密内容包含一些诸如、这些特殊字符的时候&#xff0c;使…

负采样,yyds!

文 | 徐澜玲源 | RUC AI Box引言&#xff1a;负采样方法最初是被用于加速 Skip-Gram 模型的训练&#xff0c;后来被广泛应用于自然语言处理 (NLP)、计算机视觉 (CV) 和推荐系统 (RS) 等领域&#xff0c;在近两年的对比学习研究中也发挥了重要作用。本文聚焦于负采样方法&#x…

图谱实战 | 10 个前沿落地应用案例分享(附下载)

转载公众号 | DataFunSummit导读&#xff1a;知识图谱和图学习都是这两年比较热门的研究方向。近年来&#xff0c;无论是工业界还是学术界&#xff0c;都陆续提出了自己的知识图谱构建平台&#xff0c;知识图谱被广泛应用在推荐、医疗等行业场景&#xff1b;各个公司、各个研究…

LeetCode 1080. 根到叶路径上的不足节点(递归)

1. 题目 给定一棵二叉树的根 root&#xff0c;请你考虑它所有 从根到叶的路径&#xff1a;从根到任何叶的路径。&#xff08;所谓一个叶子节点&#xff0c;就是一个没有子节点的节点&#xff09; 假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 lim…

Spring Cloud构建微服务架构:分布式配置中心(加密解密)

在微服务架构中&#xff0c;我们通常都会采用DevOps的组织方式来降低因团队间沟通造成的巨大成本&#xff0c;以加速微服务应用的交付能力。这就使得原本由运维团队控制的线上信息将交由微服务所属组织的成员自行维护&#xff0c;其中将会包括大量的敏感信息&#xff0c;比如&a…

112页机器学习数学知识整理!数学基础回顾.pptx

机器学习的基础是数学&#xff0c;数学基础决定了机器学习从业人员的上限&#xff0c;想要学好机器学习&#xff0c;就必须学好数学。这么多数学知识&#xff0c;不管是硕士阶段还是博士阶段的研究生&#xff0c;是没法学完全的&#xff0c;必须有所取舍&#xff0c;黄海广博士…

LeetCode 274. H指数(排序,哈希)

1. 题目 给定一位研究者论文被引用次数的数组&#xff08;被引用次数是非负整数&#xff09;。编写一个方法&#xff0c;计算出研究者的 h 指数。 h 指数的定义: “h 代表“高引用次数”&#xff08;high citations&#xff09;&#xff0c;一名科研人员的 h 指数是指他&…