千家信息网

Spring Cloud中熔断器Hystrix有什么用

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要为大家展示了"Spring Cloud中熔断器Hystrix有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Spring Cloud中熔
千家信息网最后更新 2025年12月02日Spring Cloud中熔断器Hystrix有什么用

这篇文章主要为大家展示了"Spring Cloud中熔断器Hystrix有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Spring Cloud中熔断器Hystrix有什么用"这篇文章吧。

一、断路器简介

Netflix has created a library called Hystrix that implements the circuit breaker pattern. In a microservice architecture it is common to have multiple layers of service calls.

. --摘自官网

Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:

较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。

断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

二、准备工作

这篇文章基于上一篇文章的工程,首先启动上一篇文章的工程,启动eureka-server 工程;启动service-hi工程,它的端口为8762。

三、在ribbon使用断路器

改造serice-ribbon 工程的代码,首先在pox.xml文件中加入spring-cloud-starter-hystrix的起步依赖:

    org.springframework.cloud    spring-cloud-starter-hystrix

在程序的启动类ServiceRibbonApplication 加@EnableHystrix注解开启Hystrix:

@SpringBootApplication@EnableDiscoveryClient@EnableHystrixpublic class ServiceRibbonApplication {        public static void main(String[] args) {        SpringApplication.run(ServiceRibbonApplication.class, args);        }        @Bean        @LoadBalanced        RestTemplate restTemplate() {                return new RestTemplate();        }}

改造HelloService类,在hiService方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串,字符串为"hi,"+name+",sorry,error!",代码如下:

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    @HystrixCommand(fallbackMethod = "hiError")    public String hiService(String name) {        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);    }    public String hiError(String name) {        return "hi,"+name+",sorry,error!";    }}

启动:service-ribbon 工程,当我们访问http://localhost:8764/hi?name=forezp,浏览器显示:

hi forezp,i am from port:8762

此时关闭 service-hi 工程,当我们再访问http://localhost:8764/hi?name=forezp,浏览器会显示:

hi ,forezp,orry,error!

这就说明当 service-hi 工程不可用的时候,service-ribbon调用 service-hi的API接口时,会执行快速失败,直接返回一组字符串,而不是等待响应超时,这很好的控制了容器的线程阻塞。

四、Feign中使用断路器

Feign是自带断路器的,在D版本的Spring Cloud中,它没有默认打开。需要在配置文件中配置打开它,在配置文件加以下代码:

feign.hystrix.enabled=true

基于service-feign工程进行改造,只需要在FeignClient的SchedualServiceHi接口的注解中加上fallback的指定类就行了:

@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class)public interface SchedualServiceHi {    @RequestMapping(value = "/hi",method = RequestMethod.GET)    String sayHiFromClientOne(@RequestParam(value = "name") String name);}

SchedualServiceHiHystric需要实现SchedualServiceHi 接口,并注入到Ioc容器中,代码如下:

@Componentpublic class SchedualServiceHiHystric implements SchedualServiceHi {    @Override    public String sayHiFromClientOne(String name) {        return "sorry "+name;    }}

启动四servcie-feign工程,浏览器打开http://localhost:8765/hi?name=forezp,注意此时service-hi工程没有启动,网页显示:

sorry forezp

打开service-hi工程,再次访问,浏览器显示:

hi forezp,i am from port:8762

这证明断路器起到作用了。

五、Hystrix Dashboard (断路器:Hystrix 仪表盘)

基于service-ribbon 改造,Feign的改造和这一样。

首选在pom.xml引入spring-cloud-starter-hystrix-dashboard的起步依赖:

        org.springframework.boot        spring-boot-starter-actuator        org.springframework.cloud        spring-cloud-starter-hystrix-dashboard

在主程序启动类中加入@EnableHystrixDashboard注解,开启hystrixDashboard:

@SpringBootApplication@EnableDiscoveryClient@EnableHystrix@EnableHystrixDashboardpublic class ServiceRibbonApplication {
..//代码省略}

打开浏览器:访问http://localhost:8764/hystrix,界面如下:

点击monitor stream,进入下一个界面,访问:http://localhost:8764/hi?name=forezp

此时会出现监控界面:

以上是"Spring Cloud中熔断器Hystrix有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

工程 断路器 篇文章 代码 方法 注解 浏览器 改造 浏览 熔断器 服务 内容 字符 字符串 接口 故障 文件 界面 中加 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么取消数据库只读 电脑手游服务器不一样 碧橙网络技术有限公司招聘 网络安全专业需要文科还是理科 cf服务器暂停图片 数据库的多表查询实验总结与分析 中兴通讯的软件开发有什么部门 阿里云服务器退费后备案怎么办 入门级企业服务器品牌 数据库运维目标是什么 软件开发遇到资金风险怎么办 掘泥打击者魔兽数据库 mybatis设置数据库列名 sql语言可以删除数据库吗 常见的企业网络安全问题 阿里云服务器什么配置够用 徐汇区互联网络技术服务信息 华为网络安全评估中心 网站代理服务器获得软件 网络安全合作发展 交通安全和网络安全周记 永定区标乾网络技术工作室 数据库只能输出三位整数 广电网络安全中心 杭州飞猪网络技术有限公司 广西数据网络安全工程介绍 奉贤区常规软件开发技术指导 广州哲彦互联网科技有限公司 网络安全应急办公室设在 人民银行软件开发中心地址
0