hystrix熔断机制

原理就是现场隔离,服务降级

为每个微服务提供线程池,当线程池中的线程不够用时候,默认不采用排队,加速判定失败时间,用户通过线程池中线程访问服务,如果线程池已经满了,或者请求超时,就会降级处理

服务降级发生情况:

      线程已经满了,

      请求超时(默认的请求超时时间是2s)

用户请求故障的时候,不会阻塞,更不会无休止的等待,至少可以看到一个可以执行的结果,

服务 的消费方引入依赖

启动类上加上@EnableCircuitBreaker注解,配置文件中加上@SpringCloudApplication=@EnableCircuitBreaker+@SpringBootApplication+@EnableDiscoveryClient

使用:

  1、对应的@RequestMapping注解上加上:@HystrixCommand(fallbackMethods="回滚函数名字")注意函数返回springbootapplication值值和参数列表和原来函数必须一致

  2、或者直接在controller类上面加上@DefaultProperties(defaultFallback=“方法”),因为统一的方法,所以参数列表不能再有值了,想要使用的时候对应的方法上加上@HystrixCommand

  定义超时时长@HystrixCommand(commandProperties={@HystrixProperties(key="excution.isolation.thread.timeoutInMilliseconds",value=2000)})

或者pom文件中全局配置(这里的参数都能在源码包里找到)

hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 3000

default:可以是服务的名字或者方法,表示只对一个服务或者方法 配置

熔断:

状态机有三个状态:

closed:关闭状态,所有请求都正常访问

open状态:打开状态,所有请求都会被降级,Hystrix对请求情况统计,当一定时间请求的失败百分比达到阈值,熔断器就会打开,默认的比例是百分之五十,请求的次数不超过20

half open:半开状态,熔断器打开后悔进入休眠(默认是5s)时间结束后会放行一部分的请求,若请求健康正常,熔断器就会进入关闭状态,否则熔断器就会继续打开,这样往复执行循环

 熔断器打开的时候,请求到达的时候直接回执行rollback方法

  

原文地址:https://www.cnblogs.com/feixiangdecainiao/p/10851393.html