美文网首页
SpringCloud 2.0 之 Hystrix

SpringCloud 2.0 之 Hystrix

作者: rommy020 | 来源:发表于2018-08-29 18:50 被阅读0次

    Hystrix 介绍

    中文名: "豪猪",豪猪周身长满了刺,能保护自己不受天敌的伤害, 代表了一种防御机制, 因此Netflix团队将该框架命名为Hystrix.


    Hystrix.png

    为什么要用Hystrix:

    在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

    如何使用:

    使用非常简单, 只需要2步:
    1: 引入依赖

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

    2: 在启动类上增加@EnableCircuitBreaker

    下面我们对Hystrix的具体功能加以讲解:

    1: 服务降级

    服务降级是指server端不能正常服务的时候, 可以使用服务降级, 内部服务问题(RuntimeException)的也可以降级, 降级到自己的处理方法中.

    HystrixController.java

    import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    @DefaultProperties(defaultFallback = "defaultFallback") //如果没有在降级的方法中指定fallbackMethod, 就使用default的
    public class HystrixController {
        //当http://localhost:8083/getProduct不可访问的时候, 发生降级
    
        //@HystrixCommand(fallbackMethod = "fallback")
        @HystrixCommand
        @GetMapping("/getProductList")
        public String getProductList(){
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject("http://localhost:8083/getProduct", String.class);
    
            return result;
        }
    
        private String fallback(){
            return "请稍后再试~~~";
        }
    
        private String defaultFallback(){
            return "默认fallback,请稍后再试~~~";
        }
    }
    

    2: 超时

    当访问的服务需要很久的时候, 就可以设置, 当超时的时候如何处理), 下面可以设置超时的时间, 可以通过注解实现和yml实现
    a:在方法上增加注解

    @HystrixCommand(commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="3000")
    })
    

    b: 在application.yml中配置

    hystrix:
      commond:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 2000
    

    3: 熔断

    在一定时间内,用户请求超过一定的比例失败时(timeout, failure, reject),断路器就会打开;短路器打开后所有请求直接走fallback

    enter code here
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="1000"),
            @HystrixProperty(name="circuitBreaker.enabled", value="true"), //设置熔断, 某个服务单元发生问题, 则断路
            @HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value="10"),
            @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value="10000"),
            @HystrixProperty(name="circuitBreaker.errorThresholdPercentage", value="60")
    })
    @GetMapping("/getProductList2")
    

    4: 和Feign结合

    feign.hystrix.enabled = true

    Hystrix的可视化

    1: 在启动类上增加
    @EnableHystrixDashboard

    2: 引入依赖

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

    3: yml中增加

    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    4: 浏览器中输入
    http://localhost:8085/hystrix
    5: 输入
    http://localhost:8085/actuator/hystrix.stream
    2000, title(随便写)

    6: 就可以进入到监控画面


    HystrixDashboard.jpg

    相关文章

      网友评论

          本文标题:SpringCloud 2.0 之 Hystrix

          本文链接:https://www.haomeiwen.com/subject/hfwkwftx.html