Hystrix介绍以及使用

2. Hystrix

1..1. Hystrix介绍

  1. 问题引入 : 多个微服务之间调用的时候,假如A调用B和C,B和C又调用其他的微服务,这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用,对A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即"雪崩效应"。
  2. Hystrix概念 : 用于处理分布式系统的延迟和容错,保证一个服务出现故障时,不会导致整个系统出现雪崩效应,同时作为“断路器”,在一个服务出现故障时,返回一个可以处理的响应结果,保证服务调用线程不会长时间被占用,避免故障蔓延。
  3. Hystrix作用
  • 服务降级 : 服务出现故障时,给故障服务降级到事先准备好的故障处理结果
  • 服务熔断 : 是应对服务雪崩的一种链路保护机制,当服务出现故障时,服务会进行降级,熔断该服务节点,迅速返回错误响应信息。当检测到服务访问正常时,恢复其链路节点。
  • 2.Hystrix的使用

  • 改造 service-edu 模块

    2.1. 在 service 的 pom 中添加依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
    
    <!--hystrix依赖,主要是用  @HystrixCommand -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
    <!--服务注册-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--服务调用-->
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    2.2. 在配置文件中添加 hystrix 配置

    #开启熔断机制
    feign.hystrix.enabled=true
    # 设置hystrix超时时间,默认1000ms
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

    2.3. 在 service-edu 的 client 包里面创建熔断器的实现类

    @Component
    public class VodFileDegradeFeignClient implements VodClient {
    
        @Override
        public R removeVideo(String videoId) {
            return R.error().message("time out");
        }
    
        @Override
        public R removeVideoList(List videoIdList) {
            return R.error().message("time out");
        }
    }

    2.4. 修改 VodClient 接口的注解

    @FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
    @Component
    public interface VodClient {
        @DeleteMapping(value = "/eduvod/vod/{videoId}")
        public R removeVideo(@PathVariable("videoId") String videoId);
    
        @DeleteMapping(value = "/eduvod/vod/delete-batch")
        public R removeVideoList(@RequestParam("videoIdList") List videoIdList);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值