SpringCloud: 第七章 熔断与降级

1.服务雪崩:
多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"四 出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应"。

2.服务熔断:
熔断机制是应对雪崩效应的一种微服务链路保护机制。
当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回"错误"的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。 Hystrix会监控微服务间调用的状况,当失败的调用到-定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand.
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在个依赖出问题的情况下, 不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回-个符合预期的、可处理的备选响应(FallBack) ,而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至香崩。

3.如何实现微服务的熔断,本章提供两种方法实现
(两种方法都要)先加上相关依赖

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

然后启动类加上注解@EnableHystrix

@SpringBootApplication
@EnableEurekaClient //Eureka客户端
@EnableFeignClients(basePackages = "com.example.huawei")
@EnableHystrix //添加熔断降级注解
public class HuaweiApplication {

    public static void main(String[] args) {
        SpringApplication.run(HuaweiApplication.class, args);
    }
}

第一种@HystrixCommand(fallbackMethod=”方法名”)来实现,如图所示,当调用getAll方法失败后会降级调用@HystrixCommand里面的fallbackMethod中的方法,注意fallbackMethod中的方法返回必须跟调用的方法一致。
在这里插入图片描述
第二种是针对用feign做负载均衡的
1.yml文件中开启feign.hystrix.enabled:true

feign:
  hystrix:
    enabled: true

2.先建一个用来调用失败,降级返回本地方法的类,如图所示:StudentServiceFallback就是降级返回本地方法的类。
在这里插入图片描述
StudentServiceFallback:

@Component
public class StudentServiceFallback implements StudentService{

    @Override
    public List getAll() {
        List list = new ArrayList();
        list.add("暂停服务");
        return list;
    }
}

当contoller调用/list方法失败时就会返回list.add(“暂停服务”)的本地值

@RestController
public class ListContoller {

    @Autowired
    private StudentService studentService;

    @GetMapping("/list")
    public List getAll(){
        return studentService.getAll();
    }
    
}

(git地址git@gitee.com:zhu_can_admin/springcloud.git)

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页