欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springcloud之Hystrix

程序员文章站 2022-07-15 13:02:14
...

一、 概述
各个服务之间可以相互调用(rpc),服务之间具有依赖性,由于网络或自身的原因,当某个服务出现问题,该服务一定会出现请求超时,线程阻塞等问题,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Hystrix可以解决雪崩问题
1、资源隔离:包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。
2、降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
3、融断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。4、缓存:提供了请求缓存、请求合并实现。
二、 实现降级和熔断
maven依赖:(在实现了eureka和feign的基础上)

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

配置文件:

#开启hystrix
feign:
  hystrix:
    enabled: true
#设置超时时间
hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 4000

在前面的feign的文章中 创建了接口public interface OfficeFeign1();
此时新建一个回调的本地函数 FeignFallback 实现OfficeFeign1 接口。

@Component
public class FeignFallback implements OfficeFeign1 {
    private static final Logger logger = LoggerFactory.getLogger(FeignFallback.class);
    @Override
    public List<String> getOrderByUserList() {
        logger.info("/app/getUser1 连接超时或异常");
        List<String> list = new ArrayList<String>();
        list.add("服务发生异常");
        return list;
    }

修改OfficeFeign1 的注解即可

@FeignClient(value = "service-office",fallback = FeignFallback.class)//这里
public interface OfficeFeign1 {
    @GetMapping("/app/getUser1")
    List<String> getOrderByUserList();
}

当请求超时 或服务不可用时,会进行服务降级,调用本地的方法。
三、 经验总结
。。。

相关标签: hystrix