Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

之前我们将 Hystrix 引入到了商品模块,但是如果这样去写,会和商品模块的业务代码耦合度太高,不利于维护,所以需要解耦。

我们这里是整合 Feign 与 Hystrix,所以需要将 Hystrix 引入到订单模块中去。

一、项目修改

订单模块

pom

<!-- hystrix 断路器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.9.RELEASE</version>
</dependency>

增加 feign 远程调用的具体实现

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

之前我们的 feign 远程调用是一个接口,现在我们给这个接口弄一个实现类。

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

这里实现类其实就是熔断降级要走的方法,写好之后,再回到 feign 中进行配置~~~

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

yml

yml 中我们需要开启 feign 对 Hystrix 的支持。

feign: 
  client:
    config:
      default: # 这里就是指的所有被加载的默认FeignClient实现的服务配置都生效
        connectTimeout: 1000
        readTimeout: 2000
  circuitbreaker:
    enabled: true

之前版本添加支持是通过

feign: 

  hystrix: 

    enabled: true

这样的形式进行添加的,但是现在改成了 feign.circuitbreaker.enabled ~~

商品模块

商品模块我们当时弄了三个,现在自己找一个没有引入 Hystrix 的模块进行修改。

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

要增加的代码很简单~~~,这里休眠 2 秒。

二、测试 1

我们将之前数据库中的数据清除掉,然后启动 Eureka Server 集群,以及两个业务模块。

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

可以看到,调用的话是正常的,返回 code 值 200,我们来看看日志。

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

可以看到,Feign 调用商品模块的时候,服务被熔断了~~~(这里是因为 Hystrix 导致我们的服务被熔断,可以看请求时间。)

三、测试 2

我们在订单模块中增加 Hystrix 超时时间

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

这里要注意一点,一定要将 Hystrix 的超时时间超过上面 feign 的超时时间。

再来测试~~~

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

这个和上面测试的结果很类似,请求返回的 code 也是 200,再来看日志。

Spring Cloud(2020.0.3) | 从入门到入土 - 15. Feign 整合 Hystrix

日志也是一样。

但是,细心的人可能已经发现问题了。我们两次测试的结果虽然效果是一样的,但是!!!超时机制的拦截缺不一样。

第一次测试的超时是因为 Hystrix 导致,因为 Hystrix 的超时默认是 1 秒,而 Feign 是 2 秒(要看读取时间),我们程序响应需要 2 秒,所以这里 Hystrix 就已经帮我们做服务熔断降级处理了。

而第二次测试,我们在订单模块中增加了 Hystrix 的超时时间配置,将之前的 1 秒提高到了 3 秒,其他的没变,但是我们可以看响应时间,是 2.08 秒,也就是说,我们这次是因为超过了 Feign 的读取超时时间,所以 Feign 将服务熔断降级了。

四、Feign 整合 Hystrix 后超时机制

通过上面的两次测试,可以看出第二次测试结果,业务请求根本没有过 Hystrix。

所以这里是强制要求,openFeign 的超时时间一定要大于 Hystrix,否则我们配置的 Hystrix 根本没有用。


这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com

最近网站已经做好,并且已经上线,欢迎各位留言~~

上一篇:nginx+php+navicat http通道连接


下一篇:Linux + Nginx + 安装多版本PHP