zoukankan      html  css  js  c++  java
  • SpringCloud----熔断机制 -- 断路器hystrix

    参考借鉴:http://www.cnblogs.com/chry/p/7279856.html

    SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多个层次的服务调用. 下面是微服架构下, 浏览器端通过API访问后台微服务的一个示意图:

    一个微服务的超时失败可能导致瀑布式连锁反映,下图中,Hystrix通过自主反馈实现的断路器, 防止了这种情况发生。

    图中的服务B因为某些原因失败,变得不可用,所有对服务B的调用都会超时。当对B的调用失败达到一个特定的阀值(5秒之内发生20次失败是Hystrix定义的缺省值), 链路就会被处于open状态, 之后所有所有对服务B的调用都不会被执行, 取而代之的是由断路器提供的一个表示链路open的Fallback消息. Hystrix提供了相应机制,可以让开发者定义这个Fallbak消息.

    open的链路阻断了瀑布式错误, 可以让被淹没或者错误的服务有时间进行修复。这个fallback可以是另外一个Hystrix保护的调用, 静态数据,或者合法的空值. Fallbacks可以组成链式结构,所以,最底层调用其它业务服务的第一个Fallback返回静态数据.

    下面,进入正题,在之前的两HELLO WORLD服务集群中加入断路器, 防止其中一个Hello world挂掉后, 导致系统发生连锁超时失败。

    1. 在maven工程Feign工程(消费者)的pom.xml中添加hystrix库支持断路器(本文主要讲解Feign)

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

    2. 在Feign应用中使用断路器

    1). Feign内部已经支持了断路器,所以不需要想Ribbon方式一样,在Spring Boot启动类上加额外注解

     1 //解决"Unable to connect to Command Metric Stream"的问题
     2     @Bean
     3     public ServletRegistrationBean getServlet() {
     4         HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
     5         ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
     6         registrationBean.setLoadOnStartup(1);
     7 //        registrationBean.addUrlMappings("/actuator/hystrix.stream");
     8         registrationBean.addUrlMappings("/hystrix.stream");
     9         registrationBean.setName("HystrixMetricsStreamServlet");
    10         return registrationBean;
    11     }

    2). 用@FeignClient注解添加fallback类, 该类必须实现@FeignClient修饰的接口。

    3). 创建一个实现类, 去实现被@FeignClient修饰的如上图中的接口。注意添加@Component或者@Service注解,在Spring容器中生成一个Bean

    4). Spring Cloud之前的Brixton版本中,Feign是缺省是自动激活了断路器的,但最近的Dalston版本已经将缺省配置修改为禁止。所以要在Feign中使用断路器, 必须在配置中添加如下配置:(两种方式,根据文件类型不同)
    feign:
    hystrix:
    enabled: true

    feign.hystrix.enabled=true

     3. Hystrix Dashboard (断路器:hystrix 仪表盘)

    Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboard可以很高效的现实每个断路器的健康状况。

    1). 在Feign服务(消费者)的Maven工程的pom.xml中都加入依赖

    1 <dependency>
    2    <groupId>org.springframework.boot</groupId>
    3    <artifactId>spring-boot-starter-actuator</artifactId>
    4 </dependency>
    5 <dependency>
    6   <groupId>org.springframework.cloud</groupId>
    7   <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    8 </dependency>

    spring-boot-starter-actuator用于手机metric, 支持hystrix.stream。spring-cloud-starter-hystrix-dashboard支持dashboard的UI
    2)在Spring Boot启动类上用@EnableHystrixDashboard注解和@EnableCircuitBreaker注解。需要特别注意的是我们之前的Feign服务由于内置断路器支持, 所以没有@EnableCircuitBreaker注解,但要使用Dashboard则必须加,如果不加,Dashboard无法接收到来自Feign内部断路器的监控数据,会报“Unable to connect to Command Metric Stream”错误

    3)然后就可以访问/hystrix,这个URL将dashboard指向定义在Hystrix客户端应用中的/hystrix.stream

    在dashboard中输入服务的URL:点击 monitor后进入监控界面,访问Feign服务http://192.168.1.33:63006/可以看到监控UI动态变化

     

     https://www.cnblogs.com/duanxz/p/7525443.html

  • 相关阅读:
    练习题
    练习题
    作业 —— day77
    解决:Django项目no such table django_session
    解决:A server error occurred. Please contact the administrator
    作业24
    元类
    类的内置方法
    反射
    考试错题
  • 原文地址:https://www.cnblogs.com/wdzhz/p/10482220.html
Copyright © 2011-2022 走看看