SpringCloud之Hystrix

1 优点

  • 提供了各种策略帮助我们执行降级方法,快速失败,返回托底数据。
  • Hystrix提供了两种隔离策略,避免Tomcat线程池耗尽。
  • 提供了断路器,以一定的策略指定某一个功能快速失败。
  • 提供了实时的监控界面。

2 Hystrix的降级

导入依赖

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

在启动类中添加注解

@EnableCircuitBreaker

在Controller方法中添加注解

@HystrixCommand(fallbackMethod = "getByIdFallback")
public Customer getById(@PathVariable Integer id){........}

编写指定的fallback方法

public Customer getByIdFallback(@PathVariable Integer id){........}

3 Hystrix的隔离策略

  • 为了避免容器的线程池耗尽
    • 使用Hystrix自带的线程池(默认)
      • 接收请求的线程和处理业务逻辑代码的线程不是一个,处理业务的线程是Hystrix的线程。
    • 信号量策略
      • 由信号量管理容器的线程池,出现了线程池耗尽,信号量也会执行快速失败。

4 Hystrix隔离策略的属性

  • 线程池的属性:

指定属性配置:

@HystrixCommand(fallbackMethod = "getByIdFallback",
            commandProperties = {
            @HystrixProperty(name = "execution.isolation.strategy",value = "SEMAPHORE"),
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1000"),
            @HystrixProperty(name = "execution.timeout.enabled",value = "false"),
            @HystrixProperty(name = "execution.isolation.thread.interruptOnTimeout",value = "false"),
            @HystrixProperty(name = "execution.isolation.thread.interruptOnCancel",value = "true")
    })

5 断路器

5.1 安装监控界面
导入依赖

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

在启动类添加注解

@EnableHystrixDashboard

构建Servlet

@WebServlet("/hystrix.stream")
public class HystrixServlet extends HystrixMetricsStreamServlet{}

扫描Servlet注解

@ServletComponentScan("com.hqy.customer.servlet")

5.2 配置断路器信息

@HystrixCommand(fallbackMethod = "getByIdFallback",commandProperties = {
  @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  // 开启断路器
  @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "5"), // 10s内总请求数为5个,才计算断路器
  @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "30000"),  // open会持续30s
  @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "20")//请求失败率达到20%就open断路器
})

在断路器配置开启的前提下,在10s内,发起5个请求,如果失败率在20%,断路器就会Open,并且维持30s。
在断路器Open时,所有的请求都会直接返回托底数据。
当30s过后,断路器会达到Half_Open的状态,放行一个请求到达功能内部执行:

  • 执行成功,断路器回到Closed状态,正常对外提供服务。
  • 执行失败,断路器回到Open状态,维持30s。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值