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

基于Hystrix实现限流

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

前言

在微服务治理中,我们常常会遇到依赖接口超时或者调用失败的场景,如果没有对这些异常的场景做补偿会影响用户体验,甚至会导致应用瘫痪,影响其他业务。那如何解决呢?目前业界常用的方案就是熔断和降级两种方式。Hystrix是提供熔断降级的组件,帮助我们解决业务上的困难。下面简单介绍一些Hystrix的一些使用姿势。

hystrix的两种降级方式

  • 信号量
  • 线程池

下面是信号量降级的使用:
具体参数的含义在注释中。

        @HystrixCommand(
            groupKey = "timeline-group-rcmd",
            fallbackMethod = "callback",
            commandProperties = {
                    @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"), // 信号量隔离,因为业务方法用了ThreadLocal
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "100"), //超时时间
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value="50"),//触发熔断最小请求数量
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value="30"),//触发熔断的错误占比阈值
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value="3000"),//熔断器回复时间
                    @HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests", value="300"),// 单机最高并发
                    @HystrixProperty(name = "fallback.isolation.semaphore.maxConcurrentRequests", value="100")// fallback单机最高并发
            }
    )
    public void call() {
        count++;
        if(0 == 0) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

            }
        }
    }
   /**
   * callback 方法
   */
    public void callback() {
        System.out.println("callback");
    }
相关标签: hystrix