天天看点

spring boot集成Hystrix

spring boot集成Hystrix

  • ​​1. 什么是Hystrix​​
  • ​​2. Hystrix解决了什么问题​​
  • ​​3. Hystrix设计原则​​
  • ​​4. Hystrix工作机制​​
  • ​​5. RestTemplate和Ribbon使用Hystrix​​
  • ​​5.1 创建项目​​
  • ​​5.2 配置​​
  • ​​5.3 添加注解​​
  • ​​5.4 创建Ribbon配置​​
  • ​​5.5 创建Ribbon Service​​
  • ​​5.6 创建controller​​
  • ​​5.7 验证​​
  • ​​6. 在Feign上使用熔断器​​
  • ​​6.1 创建项目​​
  • ​​6.2 配置​​
  • ​​6.3 添加注解​​
  • ​​6.4 feign配置​​
  • ​​6.5 feign调用​​
  • ​​6.6 feign的hystrix处理​​
  • ​​6.7 service​​
  • ​​6.8 controller​​
  • ​​6.9 验证​​
  • ​​7. RestTemplate和Feign对比​​
  • ​​8. Hystrix Dashboard & RestTemplate​​
  • ​​8.1 创建​​
  • ​​8.2 配置​​
  • ​​8.3 配置hystrix dashboard​​
  • ​​8.4 配置ribbon​​
  • ​​8.5 service​​
  • ​​8.6 controller​​
  • ​​8.7 注解​​
  • ​​8.8 启动​​
  • ​​9. Hystrix Dashboard & Feign​​
  • ​​9.1 创建​​
  • ​​9.2 配置​​
  • ​​9.3 配置hystrix dashboard​​
  • ​​9.4 配置feign​​
  • ​​9.5 dao.feign​​
  • ​​9.6 hystrix.feign​​
  • ​​9.7 service​​
  • ​​9.8 controller​​
  • ​​9.9 注解​​
  • ​​9.10 启动​​
  • ​​10. Turbine聚合监控​​
  • ​​10.1 创建​​
  • ​​10.2 配置​​
  • ​​10.3 启动​​

git地址

​​ https://github.com/a18792721831/studySpringCloud.git

​​

1. 什么是Hystrix

在分布式系统中,服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞。Hystrix 是 Netflix公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。

2. Hystrix解决了什么问题

在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,例如机房的不可靠性、网络服务商的不可靠性等,导致某个服务不可用。如果系统不隔离该不可用的服务,可能会导致整个系统不可用。

在高并发的情况下,单个服务的延迟会导致整个请求都处于延迟状态,可能在几秒钟就使整个服务处于线程负载饱和的状态。

某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果就是整个服务的线程资源消耗殆尽。由于服务的依赖性,会导致依赖于该故障服务的其他服务也处于线程阻塞状态,最终导致这些服务的线程资源消耗殆尽,直到不可用,从而导致整个问服务系统都不可用,即雪崩效应。

为了防止雪崩效应,因而产生了熔断器模型。Hystrix 是在业界表现非常好的一个熔断器模型实现的开源组件,它是Spring Cloud 组件不可缺少的一部分。

3. Hystrix设计原则

总的来说,Hystrix的设计原则如下。

  • 防止单个服务的故障耗尽整个服务的Servlet容器(例如Tomcat)的线程资源。
  • 快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待。
  • 提供回退(fallback)方案,在请求发生故障时,提供设定好的回退方案。
  • 使用熔断机制,防止故障扩散到其他服务。
  • 提供熔断器的监控组件Hystrix Dashboard,可以实时监控熔断器的状态。

4. Hystrix工作机制

首先,当服务的某个 API 接口的失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,该 API接口正常提供服务。当该API 接口处理请求的失败次数大于设定的阀值时,Hystrix判定该API接口出现了故障,打开熔断器,这时请求该 API 接口会执行快速失败的逻辑(即 fallback 回退的逻辑),不执行业务逻辑,请求的线程不会处于阻塞状态。处于打开状态的熔断器,一段时间后会处于半打开状态,并将一定数量的请求执行正常逻辑。剩余的请求会执行快速失败,若执行正常逻辑的请求失败了,则熔断器继续打开;若成功了,则将熔断器关闭。这样熔断器就具有了自我像复的能力。

5. RestTemplate和Ribbon使用Hystrix

5.1 创建项目

spring boot集成Hystrix

5.2 配置

配置服务名称,eureka server,日志等

spring boot集成Hystrix

配置eureka client服务提供者的连接名称

spring boot集成Hystrix

5.3 添加注解

spring boot集成Hystrix

5.4 创建Ribbon配置

spring boot集成Hystrix

5.5 创建Ribbon Service

spring boot集成Hystrix

当Hystrix认为eureka client的服务提供者提供的服务不可用时,就会访问fallbackMethod的方法

5.6 创建controller

spring boot集成Hystrix

5.7 验证

首先启动eureka server

spring boot集成Hystrix

然后启动本项目

spring boot集成Hystrix

注意,此时没有启动eureka client服务提供者,那么服务是不可用的。

访问Hystrix的接口,会调用service里面的fallbackMethod的方法。

spring boot集成Hystrix

接下来启动eureka client 服务提供者。

spring boot集成Hystrix

此时服务可达,所以,此时应该能够正确的访问的

spring boot集成Hystrix

当然,需要多试试,才能成功。

spring boot集成Hystrix

这就是Hystrix的自我修复。

将熔断器设置为半开状态,尝试请求,成功就将服务设置可用,否则继续熔断。

6. 在Feign上使用熔断器

6.1 创建项目

spring boot集成Hystrix

6.2 配置

spring boot集成Hystrix

6.3 添加注解

spring boot集成Hystrix

6.4 feign配置

spring boot集成Hystrix

6.5 feign调用

spring boot集成Hystrix

6.6 feign的hystrix处理

spring boot集成Hystrix

6.7 service

spring boot集成Hystrix

6.8 controller

spring boot集成Hystrix

开启eureka client和feign

因为feign已经引入了hystrix的依赖,所以我们这里开启就行。

因为feign调用时写的是接口,而hystrix的熔断调用的方法就是实现了feign调用的接口的类。

同时这些类和接口需要被spring管理。

在feign调用的接口需要指定熔断处理类…

6.9 验证

启动,首先需要启动eureka-server和eureka client服务提供者

接着启动feign-hystrix(也就是feign)

访问:

spring boot集成Hystrix

关闭eureka client服务提供者

spring boot集成Hystrix

就去调用熔断处理的方法了。

7. RestTemplate和Feign对比

两者都能实现熔断处理。不过feign比RestTemplate更好。

  1. RestTemplate是使用硬编码指定熔断处理方法的,而feign则是指定类
  2. RestTemplate熔断处理方法没有限制,而feign则是实现接口,其方法已被定义
  3. RestTemplate请求单一,而feign有HttpUrlConnection,HttpClient,OkHttp多种方式
  4. RestTemplate需要自己增加依赖,而feign已集成,无需管理
  5. RestTemplate学习成本小于feign

8. Hystrix Dashboard & RestTemplate

8.1 创建

spring boot集成Hystrix

8.2 配置

spring boot集成Hystrix

8.3 配置hystrix dashboard

spring boot集成Hystrix

注意:

这里的urlMapping就是熔断器的元数据访问地址,如果不配置,会无法访问导致异常。

当然也可以添加多个,比如

spring boot集成Hystrix

因为内部是一个list,不存在覆盖的问题

spring boot集成Hystrix
spring boot集成Hystrix

8.4 配置ribbon

spring boot集成Hystrix

8.5 service

spring boot集成Hystrix

8.6 controller

spring boot集成Hystrix

8.7 注解

spring boot集成Hystrix

8.8 启动

spring boot集成Hystrix

注意,需要先启动eureka server以及eureka client服务提供者。

刚开始没有访问任何服务,此时eureka client还未获取eureka server 服务列表。

spring boot集成Hystrix
spring boot集成Hystrix

接着访问hystrix dashboard的主界面

spring boot集成Hystrix
spring boot集成Hystrix

接着访问:

spring boot集成Hystrix

其实就是配置的url实际上是等价的。

spring boot集成Hystrix

9. Hystrix Dashboard & Feign

9.1 创建

spring boot集成Hystrix

9.2 配置

spring boot集成Hystrix

9.3 配置hystrix dashboard

spring boot集成Hystrix

9.4 配置feign

spring boot集成Hystrix

9.5 dao.feign

spring boot集成Hystrix

9.6 hystrix.feign

spring boot集成Hystrix

9.7 service

spring boot集成Hystrix

9.8 controller

spring boot集成Hystrix

9.9 注解

spring boot集成Hystrix

9.10 启动

spring boot集成Hystrix
spring boot集成Hystrix

访问

spring boot集成Hystrix
spring boot集成Hystrix
spring boot集成Hystrix
spring boot集成Hystrix

这个就是元数据访问不到。

10. Turbine聚合监控

10.1 创建

spring boot集成Hystrix

10.2 配置

spring boot集成Hystrix
spring boot集成Hystrix

10.3 启动

spring boot集成Hystrix
spring boot集成Hystrix

访问

spring boot集成Hystrix
spring boot集成Hystrix

继续阅读