Hystrix 简介和使用

Hystrix

    • 一、概念
    • 二、使用
      • 1. 环境搭建
      • 2. 服务降级
      • 3. 异常熔断
      • 4. 自定义异常熔断器
      • 5.Hystrix仪表盘监控
    • 三、测试
      • 1. 异常熔断
      • 2. 超时熔断
      • 3. 熔断器获得异常
      • 4. 异常忽略
      • 5. 自定义异常熔断器

一、概念

  1. 故障蔓延:由于一个服务变慢或没有响应导致大量请求堆积,进而导致其他服务瘫痪。
    为了解决上述问题,微服务架构中引入了熔断器的服务保护机制。
    在这里插入图片描述
  2. 微服务中的熔断器:当被调用的方法没有响应,调用方法直接返回一个错误响应即可,而不是长时间的等待,这样避免调用时因为等待而线程一直得不到释放,避免故障在分布式系统间蔓延。
    在这里插入图片描述
  3. Spring Cloud Hystrix :实现了熔断器、线程隔离等一系列服务保护功能。该功能也是基于Netflex的开源框架Hystrix实现的,该框架的目标在于通过控制那些远程访问系统、服务和第三方库的节点,从而对延迟和故障提供更加强大的容错能力。Hystrix具有服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并、服务监控等强大功能。

二、使用

1. 环境搭建

  1. 消费端加入依赖:spring-cloud-starter-netflix-hystrix
    在这里插入图片描述

  2. 入口类使用@EnableCircuitBreaker注解开启熔断器功能,也可以使用@SpringCloudApplication注解来代替主类上的三个注解

  3. 在消费端调用远程服务的方法上添加注解:@HystrixCommand(fallbackMethod="error",commandProperties={ @HystrixProperty(name="execution.isolation.thread.timeoutInMillisecond",value="1500") })标记当前控制器方法采用Hystrix熔断机制,当远程服务出现了异常或超时,就会自动进行熔断。

  • 属性fallbackMethod用于指定一个本地方法的名称,当服务熔断以后就会调用这个方法来替代服务提供者的响应信息。避免用户看到错误信息或无限等待。
  • 属性commandProperties可以指定超时时间。

2. 服务降级

当某个服务熔断之后,服务端提供的服务不再被调用,此时由客户端自己准备一个本地的fallbackMethod回调,返回一个默认值来代表服务端的返回。
这种做法,虽然不能得到正确的返回结果,但至少保证了服务的可用,比直接抛出错误或服务的不可用要好得多,当然这需要根据业务场景来选择。
在这里插入图片描述

3. 异常熔断

我们在调用服务提供者时,我们会有可能抛出异常,默认情况下方法抛出了异常会自动进行服务降级,交给服务降级中的方法去处理;
当我们自己发生异常后,只需要在服务降级方法中添加一个Throwable类型的参数就能够获取到抛出的异常的类型,如下:
在这里插入图片描述
如果远程服务有一个异常抛出后我们不希望进入到服务降级方法中去处理,而是直接讲异常抛出给用户,那么我们可以在@HystrixCommand注解中添加忽略异常@HystrixCommand(fallbackMethod = "error", ignoreExceptions = { HttpServerErrorException.InternalServerError.class})

4. 自定义异常熔断器

我们也可以自定义类继承HystrixCommand来实现自定义的Hystrix请求,在getFallback方法中调用getExecutionException方法来获取服务抛出的异常;

public class MyHystrixCommand extends HystrixCommand<String> {private RestTemplate restTemplate;private String url;/*** 定义一个有参构造(必须)由于弗雷没有无参构造因此子类必须使用有参构造*/public MyHystrixCommand(Setter setter, RestTemplate restTemplate, String url) {super(setter);this.restTemplate = restTemplate;this.url = url;}/*** 这个方法不能手动调用,Spring会自动调用这个方法来访问我们的服务提供者*/@Overridepublic String run() throws Exception {return restTemplate.getForEntity(url,String.class).getBody();}/*** 服务降级方法:当Spring自动调用run方法以后,如果服务出现了异常则自动调用这个服务降级方法来进行异常的熔断处理*/@Overridepublic String getFallback() {//获取异常信息System.out.println(super.getFailedExecutionException().getClass());System.out.println(super.getFailedExecutionException().getMessage());return "自定义异常熔断器熔断了服务";}
}

5.Hystrix仪表盘监控

Hystrix仪表盘(Hystrix Dashboard):监控Hystrix的实时运行状态,通过查看Hystrix的各项指标信息,从而快速发现系统中的问题进而解决它。
这个功能我们可以在原来的消费者应用上添加,让原来的消费者具备Hystrix仪表盘功能,但一般的,微服务架构思想推崇服务的拆分,Hystrix Dashboard也是一个服务,所以通常会单独创建一个新的工程专用做Hystrix Dashboard服务。

消费端配置

  1. 添加健康检查机制依赖包 spring-boot-starter-actuator
  2. 配置文件配置SpringBoot监控端点的访问权限:
#开启SpringBoot的健康检查机制的所有端口
management.endpoints.web.exposure.exclude=*
  1. 消费者启动服务,访问 http://localhost:80/actuator 看到 http://localhost:80/actuator/hystrix.stream 可以放到浏览器打开看看。

Hystrix Dashboard 服务端:

  1. 创建一个普通的SpringBoot工程
  2. 添加相关依赖 spring-cloud-starter-netflix-hystrix-dashboard
  3. 入口类添加注解 @EnableHystrixDashboard 激活仪表盘功能
  4. 配置文件 application.properties 中指定服务端口号 server.port=9000
  5. 启动服务,进行访问 http://localhost:9000/hystrix
    在这里插入图片描述
    点击进入:
    在这里插入图片描述

三、测试

1. 异常熔断

  • provider:
    在这里插入图片描述
  • consumer:
    在这里插入图片描述
  • 结果:由于服务端的异常,消费端使用了熔断机制
    在这里插入图片描述

2. 超时熔断

  • provider:
    在这里插入图片描述
  • consumer:
    在这里插入图片描述
  • 结果:没有熔断机制的时候会一直等待15s,得到服务;
    在这里插入图片描述
    有熔断机制的时候调用error函数,进行服务降级。
    在这里插入图片描述

3. 熔断器获得异常

在这里插入图片描述

  • 服务端异常
    在这里插入图片描述
  • 结果:使用熔断机制并且输出异常信息
    在这里插入图片描述
  • 消费端异常
    在这里插入图片描述
  • 结果:使用熔断机制输出异常信息
    在这里插入图片描述
    在这里插入图片描述

4. 异常忽略

  • 服务端
    在这里插入图片描述

  • 消费端
    在这里插入图片描述

  • 结果(错误直接暴露给用户)
    在这里插入图片描述

5. 自定义异常熔断器

  • 消费端
    在这里插入图片描述
  • 服务端没有异常时:得到服务端的响应
    在这里插入图片描述
  • 服务端有异常时:熔断机制服务降级
    在这里插入图片描述

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

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

相关文章

android中如何使用一张图片适配不同尺寸的APP引导页

在我们平常开发的过程中在做引导页适配的时候&#xff0c;有时候会犯难&#xff0c;怎么样作图可以将各种不同尺寸分辨率的手机都适配好也就是不变形不拉伸&#xff0c;官方给的说法也只是做多套图去适配不同的分辨率&#xff0c;遇到全屏展示引导这种问题的时候就有些力不从心…

还在用Tensorboard?机器学习实验管理平台大盘点

文 | SisyphusBJ源 | Pytorch Lightningwandb.aicomet.mlneptune.aiallegro trainsmlflowguild.aisacredtest-tubetensorboard相信很多同学看到上面这个列表的第一印象是懵的。我们先看下机器学习实验管理平台 到底是做神马滴&#xff1a;一句话概括就是&#xff1a;&#xff0…

论文浅尝 | 利用图 Transformer 实现基于知识图谱的文本生成

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;NAACL2019链接&#xff1a;https://arxiv.org/pdf/1904.02342.pdf本文关注如何从信息抽取结果&#xff08;特别是知识图谱&#xff09;出发&#xff0c;生…

LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)

文章目录1. 题目信息2. 解题2.1 中序递归2.2 中序循环写法1. 题目信息 给定一个二叉搜索树&#xff0c;编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明&#xff1a; 你可以假设 k 总是有效的&#xff0c;1 ≤ k ≤ 二叉搜索树元素个数。 示例 1:输入: root …

Apache Doris在美团外卖数仓中的应用实践

序言 美团外卖数据仓库技术团队负责支撑日常业务运营及分析师的日常分析&#xff0c;由于外卖业务特点带来的数据生产成本较高和查询效率偏低的问题&#xff0c;他们通过引入Apache Doris引擎优化生产方案&#xff0c;实现了低成本生产与高效查询的平衡。并以此分析不同业务场景…

Feign 简介和使用

声明式服务消费Feign一、简介二、使用Feign实现服务消费者三、实现普通的服务提供者四、Feign服务调用测试五、Feign消费者测试负载均衡服务熔断一、简介 Feign是Netflix公司开发的一个声明式的REST调用客户端&#xff1b; Ribbon负载均衡、Hystrix服务熔断是我们Spring Cloud…

论文浅尝 | 面向自动问题生成的跨语言训练

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;ACL 2019链接&#xff1a;https://128.84.21.199/pdf/1906.02525.pdf动机现有问题生成方法需要大量的“文本-问题”有标注数据对作为训练数据集&#xff…

再见,Spark!Flink已成气候!

身为大数据工程师&#xff0c;你还在苦学Spark、Hadoop、Storm&#xff0c;却还没搞过Flink&#xff1f;醒醒吧&#xff01;刚过去的2020双11&#xff0c;阿里在Flink实时计算技术的驱动下全程保持了“如丝般顺滑”&#xff0c;基于Flink的阿里巴巴实时计算平台简直强无敌。最恐…

Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展&#xff0c;摩尔定律逐渐失效&#xff0c;多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池&#xff1a;ThreadPoolExecutor类&#xff0c;帮助开发人员管理线程并方便地执行并行任务。了解并合理使…

Zuul 简介和使用

Zuul背景Zuul的作用Zuul API网关Zuul请求过滤Zuul路由规则Zuul异常处理背景 通过之前的学习&#xff0c;我们知道注册中心Eureka&#xff0c;可以讲服务注册到该注册中心&#xff0c;Ribbon和Feign可以实现服务负载均衡地调用&#xff0c;Hystrix可以实现服务熔断&#xff0c;…

技术动态 | 知识图谱上的实体链接

本文转载自公众号&#xff1a;知识工场 1、什么是实体链接实体链接&#xff08;entity linking&#xff09;就是将一段文本中的某些字符串映射到知识库中对应的实体上。比如对于文本“郑雯出任复旦大学新闻学院副院长”&#xff0c;就应当将字符串“郑雯”、“复旦大学…

卖萌屋学术站开放注册啦!寻募种子用户,超多特权放出!

文&#xff1a;夕小瑶消失一个多月的小夕又突然出现啦&#xff01;要问小夕最近业余时间在做什么&#xff0c;那就是跟小伙伴们开发学术站啦~&#xff08;等...等再肝一版&#xff0c;小夕就继续给大家写文章(&#xff61; ́︿ ̀&#xff61;)众所周知&#xff0c;卖萌屋学术…

LeetCode 11. 盛最多水的容器(双指针)

文章目录1. 题目信息2. 解题1. 题目信息 给定 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。 在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。 找出其中的两条线&#xff0c;…

WSDM Cup 2020检索排序评测任务第一名经验总结

1.背景 第13届“国际网络搜索与数据挖掘会议”(WSDM 2020)于2月3日在美国休斯敦召开&#xff0c;该会议由SIGIR、SIGKDD、SIGMOD和SIGWEB四个专委会共同协调筹办&#xff0c;在互联网搜索、数据挖掘领域享有很高学术声誉。本届会议论文录用率仅约15%&#xff0c;并且WSDM历来注…

ltp︱基于ltp的无监督信息抽取模块

ltp︱基于ltp的无监督信息抽取模块&#xff1a;https://zhuanlan.zhihu.com/p/44890664 &#xfeff;无监督信息抽取较多都是使用哈工大的ltp作为底层框架。那么基于ltp其实有了非常多的小伙伴进行了尝试&#xff0c;笔者私自将其归纳为&#xff1a;事件抽取&#xff08;三元组…

Eureka 简介和使用

Eureka 服务注册与发现服务注册与发现Eureka与Zookeeper的比较ZooKeeper保证CPEureka保证APEureka是什么&#xff1f;Eureka原理SpringBoot、Spring Cloud 和 Eureka 版本选择Eureka单机搭建搭建Eureka服务端搭建Eureka客户端的服务提供者搭建Eureka客户端的服务消费者Eureka集…

论文浅尝 | XQA:一个跨语言开放域问答数据集

论文笔记整理&#xff1a;刘晓臻&#xff0c;东南大学计算机科学与工程学院本科生。Citation: Liu, J., Lin, Y., Liu, Z., & Sun, M. (2019,July). XQA: A Cross-lingual Open-domain Question Answering Dataset. InProceedings of the 57th Conference of the Associati…

深度CTR预估模型中的特征自动组合机制演化简史

文 | 杨旭东源 | 知乎众所周知&#xff0c;深度学习在计算机视觉、语音识别、自然语言处理等领域最先取得突破并成为主流方法。但是&#xff0c;深度学习为什么是在这些领域而不是其他领域最先成功呢&#xff1f;我想一个原因就是图像、语音、文本数据在空间和时间上具有一定的…

LeetCode 94. 二叉树的中序遍历(中序遍历)

文章目录1. 题目信息2. 解题2.1 递归2.2 循环&#xff0c;必须掌握1. 题目信息 给定一个二叉树&#xff0c;返回它的中序 遍历。 示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 来源&#xff1a;力扣&am…

想进美团不知道选哪个技术岗位?这里有一份通关秘籍!

春暖花开&#xff0c;美团春招已经启动&#xff0c;针对校招和社招开放了几千个职位&#xff0c;其中很大部分都是技术岗位。 随着互联网的高速发展&#xff0c;技术岗位在不断地细分&#xff0c;比如软件开发不仅分为前端和后端&#xff0c;前端会分为Web、iOS和Android三个方…