【二十一】搭建SpringCloud项目五(Hystix)并使用自定义配置

简介: 【二十一】搭建SpringCloud项目五(Hystix)并使用自定义配置


从前面几章开始从0搭建SpringCloud项目,再逐步进行优化,加入其它组件。

上一章加入了ribbon组件,这次讲解一下我对Hystix的认识,hystix又叫熔断器,用来当作一种保护机制,例如:消费服务访问提供者服务时,提供者服务端宕机了,访问该服务肯定会失败,若正常情况,后面的每次请求都会在此处失败,并且消费服务将都会等待或者出现故障,如果后续连锁反应越来越多,请求数量大了可能会导致服务瘫痪。加入熔断器后,第一次发现调用的提供者服务宕机,后面每次就会在此处快速处理,直接拒绝,不再访问,并返回一个自定义的结果,直至提供者服务恢复(熔断器能够诊断错误是否已经修正)。

本章是接着上一章进行的,现结构如下:  

第一步:添加依赖

在消费者服务添加熔断器依赖(测试用product服务调用account服务接口,在product服务添加)

<!--添加Hystrix依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

第二步:新增测试接口

如上图,testRibbon是调用account服务的接口, hystrixReturn方法是自定义的一个熔断器处理返回的方法,HystrixCommand就是熔断器处理注解,fallbackMethod即是出现错误调用哪个自定义方法进行处理。里面有很多处理方法,可以去慢慢看。

第三步:开启Hystrix

第四步:测试

使用postman进行测试

启动eureka和gateway,account,product服务(同上一章)

正常启动

假若account服务错误(关闭该服务)

当访问出现错误时,会返回自定义的方法返回的结果。

第五步:测试默认配置

熔断器的默认配置是1000ms,若请求时间超过1000ms,熔断器就会认为这是一个出错,就会执行配置的 自定义方法。

进行一下测试:

如下是提供者服务(account)的接口:

做一个线程睡眠处理,睡眠500ms(没有超过熔断器的默认认定的超时时间1000ms),重启account服务,再次请求:

结果:正常调用。

若睡眠1500ms,超过1000ms。

重启account服务,再次请求。

结果:返回自定义方法处理结果。

第六步:使用Feign开启熔断器

1、不用再启动类加Hystrix启动注解了,在yml配置文件加上

即可开启。

2、修改feign调用接口,如下,在feignClient注解上新增fallback注解,值为具体处理类

注意使用Component注解将其注入Spring容器。

在Controller层的方法里实例一个FeignClient对象,调用方法即可。

第七步:修改自定义配置(重点)

默认的熔断时间是1000ms,太短了。很多业务都不止1000ms,所以必须重写配置,不然还没有正常返回数据就被熔断了,在网上找了很多配置写在yml文件里面都没有效果,后面在网上看到一个大佬写的方式,重写一个配置类,给FeignClient注解使用(FeignClient注解,没有重新配置超时时间的方式,所以使用下面方式),如果使用@HystrixCommand注解的话,可以直接在注解里面重新配置超时时间。下面举例Feign方式使用熔断器时,重新配置熔断器的超时时间。

1、在消费服务(调用者服务)新增一个配置类

此处我写死了,你也可以在yml配置里面写参数,再通过Value注解方式获取。

2、修改FeignClient注解的configuration参数的值,值为刚才新建的配置类的类型

3、修改yml文件(重点)

新增如上配置,必须设置,且大于自定义配置设置的超时时间,这里的值默认也是1000ms,百度得知两处的配置都会生效且使用最小的一个值,所以若此处不配置,则默认使用1000ms为超时时间,上面写的配置类也不会生效。

4、测试

如下是服务提供者的方法,睡眠3000ms,模拟需要3000ms。

第二步里面可见重写的配置是4000ms,默认的是1000ms,调用服务需要3000ms,所以,若配置使用成功则不会熔断,若没有成功则会熔断。

5、测试

调用测试接口,耗时3000ms的数据能访问到,没有熔断。

若修改熔断超时时间为2000ms,结果如下显示:

若有问题,感谢指出。

目录
相关文章
|
2月前
|
应用服务中间件 Nacos nginx
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
本文为 Mac 用户介绍微服务项目环境搭建,含阿里云服务器用 Docker 装 Nacos 1.2.0,本地通过 brew 装 OpenJDK 8、Maven 3.6.1、Redis,Docker 部署 MySQL 5.7 并配字符集,及 Nginx 安装与反向代理设置,附命令与配置步骤。
234 4
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
|
11月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
1100 148
|
9月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3907 14
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
1015 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
12月前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
644 0
|
Java 微服务 Spring
Spring Cloud全解析:配置中心之解决configserver单点问题
但是如果该configserver挂掉了,那就无法获取最新的配置了,微服务就出现了configserver的单点问题,那么如何避免configserver单点呢?
207 1
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
1121 0
|
Java 数据库连接 Nacos
SpringCloud微服务配置管理、配置热更新
SpringCloud微服务配置管理、配置热更新
572 0
|
8月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
下一篇
oss云网关配置