作用:    作为保护机制,在服务宕机,网络等原因引起的服务不可用时,触发服务降级或者熔断以保证其他服务的可用。从而解决微服务的”雪崩效应“   服务降级原理: 以下举例说明:    在未使用hystrix时,假设tomcat的线程池中有1000条线程提供连接。当某个微服务挂掉后,访问该微服务的请求连接就被挂起, 逐渐占满所谓连接数,从而导致整个微服务无连接可用也就导致整个系统不可用了。  hystrix 给出以下方案:    1、 线程池隔离:给每个微服务提供一定数量的线程,每个微服务自身拥有各自的线程池用以维护自身被分配的线程。        那么该微服务宕机后,连接数量就算被占满也仅仅是分配的那几个,从而不会影响其他微服务。    2、 超时返回 :  如果连接超过一定时长则立即返回一个友好的错误提示从而解决上宕机的微服务连接数被占满而无法访问的问题。   实现步骤   1、在服务的调用方增加依赖      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
     </dependency>     2、在服务调用方的启动类上加注解
  @EnableCircuitBreaker
  @SpringCloudApplication  //该注解1顶3 (@EnableCircuitBreaker ,@SpringBootApplication,@EnableDiscoveryClient)

  3、在对应类上增加通用的错误返回方法以及配置错误方法
 
   @DefaultProperties(defaultFallback = "fallBack") //使用通用的方法作为错误的返回
public class UserController {
public String fallBack(){
return "服务异常";
}
}
  4、在application.yml 中添加超时时长(可选 默认2000ms)
#设置超时时长 为3S
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
熔断器启动原理:  spring-cloud hystrix 随笔 根据上图: closed : 熔断器关闭状态,服务正常,请求正常访问。 open : 表示熔断器打开访问请求立即返回错误消息 half open : 半开熔断器,放过一部分请求尝试访问,如果访问失败则返回到open 状态,如果成功则熔断器关闭   机制理解:判断最近的20次请求失败率(请求超时)是否超过50%,一旦超过则熔断器打开,当再次有请求访问时则立即返回错误, 并且在此刻启动定时器计算5S,5S后熔断器转换到半开状态尝试放开部分请求通过去测试请求是否正常,如果请求依然失败返回open 状态,再次进入5S计时直到请求成功,熔断器关闭。   服务降级与服务熔断的区别:???? 待完善    
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄