springcloud实战之7 断路器(Hystrix)

本文介绍了在微服务架构中如何使用Spring Cloud Hystrix作为断路器来提高系统的稳定性和容错能力。通过实际案例展示了如何在Spring Cloud项目中集成Hystrix,并实现了服务故障的快速响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在微服务广泛使用的架构中,成群的服务通过服务注册与订阅来建立关联,但每个微服务都是独立的部分(跨进程,跨机器,跨机房),服务之间通过远程调用的方式相互访问,这种架构就增加了因为网络原因造成阻塞的风险,一旦发生阻塞,一个请求经过漫长的等待最终失败,高并发情况下就可能导致整个为服务群体瘫痪,就性能上,此种微服务架构还不如传统的集中式服务安全,稳定,性能高。为了解决这种问题,springcloud提供了断路器。

断路器简介

“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时的切断故障电路,防止发生过载、发热、甚至起火等严重后果。

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

在Spring Cloud中使用了Hystrix 来实现断路器的功能。Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。

改造springcloud-consumer-ribbon项目

添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

改造service接口

@Service("restfulSerivce")
public class RestfulServiceImpl {

    @Autowired private RestTemplate restTemplate ;

    @HystrixCommand(fallbackMethod = "serviceFallback")
    public String getRestData(){
        return restTemplate.getForObject("http://springcloud-producer-rest/api/rest/info",String.class) ;
    }

    public String serviceFallback() {
        return "hi,sorry,error!";
    }
}

启动项目

1.启动springcloud-eureka-server集群,端口分别为 8080,8090

2.启动springcloud-producer-rest,端口分别为 8001

3.启动springcloud-consumer-ribbon,端口 8002

启动服务图如下:
这里写图片描述

访问http://localhost:8002/api/rest/home服务图如下:

这里写图片描述

此时停掉springcloud-producer-rest服务,再次访问接口http://localhost:8002/api/rest/home,如下图:

这里写图片描述

说明断路器起了效果!

改造springcloud-consumer-feign项目

添加依赖

不需要在Feigh工程中引入Hystix,Feign中已经依赖了Hystrix,

改造service层接口

@FeignClient(value = "springcloud-producer-rest",fallback = SchedualRestServiceHystrix.class)
public interface ISchedualRestService {
    @GetMapping("/api/rest/info")
    String info() ;
}

新建SchedualRestServiceHystrix.java,继承ISchedualRestService

@Service(value = "schedualRestService")
public class SchedualRestServiceHystrix implements ISchedualRestService{

    @Override
    public String info() {
        return "error,this is Hystrix return";
    }
}

启动服务

1.启动springcloud-eureka-server集群,端口分别为 8080,8090

2.启动springcloud-producer-rest,端口分别为 8001

3.启动服务消费者springcloud-consumer-feign。端口 8003

测试结果如下图:

这里写图片描述

源码

springcloud-server-eureka

springcloud-producer-rest

springcloud-consumer-feign

springcloud-consumer-ribbon

历史文章

springcloud实战之高可用服务注册中心(eureka集群)

springcloud实战之服务注册与发现(eureka实现)

springcloud实战之技术选型:dubbo还是springcloud

springboot实战之服务消费者(ribbon)

springcloud实战之服务消费者(Feign)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值