在微服务场景中,通常会有很多层的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。我们需要一种机制,当底层服务不可用时,可以阻断故障的传播。这就是断路器的作用。他是系统服务稳定性的最后一重保障。
在springcloud中断路器组件就是Hystrix。Hystrix也是Netflix套件的一部分。他的功能是,当对某个服务的调用在一定的时间内(默认10s,由metrics.rollingStats.timeInMilliseconds配置),有超过一定次数(默认20次,由circuitBreaker.requestVolumeThreshold参数配置)并且失败率超过一定值(默认50%,由circuitBreaker.errorThresholdPercentage配置),该服务的断路器会打开。
断路器会开辟一个线程池,线程里部分线程里request数据丢失;
导致带token调用服务失败,现把feign.hystrix.enabled=false,无论请求多少次,请求都正常;
有点疑问,断路器为啥不直接拒绝调用下一个服务接口,而是把请求里的请求头信息给清空,有待研究