SpringCloud学习四:断路器Hystrix

SpringCloud学习四:断路器Hystrix

  •  2019 年 3 月 20 日
  •  471
  •  Java SpringCloud Hystrix 

Hystrix介绍

hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix。

在微服务架构中,存在着很多多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪。针对上述问题,Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。它也是基于Netflix的开源框架Hystrix实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点, 从而对延迟和故障提供更强大的容错能力。Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。

创建服务

创建服务service-feign-hystrix,内容和之前创建的服务service-feign一致,端口号改为8765,创建完后在进行修改。

由于Feign是自带断路器的但是没有默认打开,我们需要在配置文件中配置打开它,在配置文件加以下代码:

feign:
  hystrix:
    enabled: true

创建断路处理组件

创建HelloConsumerHystrix并实现HelloConsumer接口,如下:

@Component
public class HelloConsumerHystrix implements HelloConsumer {
    @Override
    public String hello(String name) {
        return "Error, "+ name;
    }
}

Feign服务HelloConsumer指定fallback

@FeignClient(value = "client-eureka", fallback = HelloConsumerHystrix.class)
public interface HelloConsumer {

    @GetMapping("/hello")
    String hello(@RequestParam("name") String name);
    
}

访问测试

启动server-eureka、client-eureka和service-feign-hystrix,访问http://localhost:8765/hello?name=搬码工

hello 搬码工 ! from port 8762

关闭client-eureka,再次访问:

Error, 搬码工

可以看到断路器起了作用。

Hystrix仪表盘配置

添加依赖:

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

在启动类添加注解@EnableHystrixDashboard,重新启动项目,访问http://localhost:8765/hystrix,可以看到以下页面:


填写路径:http://localhost:8765/hystrix.stream,Title:hello(随意),点击Monitor Stream:


Ops~,报错了!Unable to connect to Command Metric Stream,在github上一个issue中找到了答案,解决方案是在项目中添加如下配置:

@Configuration
public class HystrixServletDefinitions {

    @Bean(name = "hystrixRegistrationBean")
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet(), "/hystrix.stream");
        registration.setName("hystrixServlet");
        registration.setLoadOnStartup(1);
        return registration;
    }

}

重启项目,再次访问:


正常了,这个时候再次访问接口http://localhost:8765/hello?name=搬码工,可以看到控制台出现了变化:


 在监控的界面有两个重要的图形信息:一个实心圆和一条曲线。

  • 实心圆:通过颜色的变化代表了实例的健康程度,健康程度从绿色、黄色、橙色、红色递减。通过大小表示请求流量发生变化,流量越大该实心圆就越大。所以可以在大量的实例中快速发现故障实例和高压实例。
  • 曲线:用来记录2分钟内流浪的相对变化,可以通过它来观察流量的上升和下降趋势。

源码地址

https://github.com/chenpeidong/spring-cloud-demo


扫一扫分享到微信

已有 条评论
写评论