SpringCloud微服务熔断器Hystrix使用详解

 更新时间:2022年07月16日 11:43:20   作者:_时光煮雨  
这篇文章主要介绍了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一个组件,在整个生态中主要为我们提供服务隔离,服务熔断,服务降级功能,本文给大家介绍的非常详细,需要的朋友可以参考下

什么是Hystrix

在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保护电路安全运行的作用。

在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧,这就是舱壁保护机制。

Hystrix提供的熔断器也类似,在调用某个服务提供者时,当一定时间内请求总数超过配置的阈值,且窗口期内错误率过高,那Hystrix就会对调用请求熔断,后续的请求直接短路,进入降级逻辑,并执行本地的降级策略。

同时Hystrix也将系统中的服务提供者隔离起来,一个服务提供者延迟过高或者失败,并不会导致整个系统的失败,同时也能够控制调用这些服务的并发度。

总之,Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

Hystrix实战

接着我们上篇文章中的dms服务,进行如下修改:

Feign 本身就支持Hystrix,不需要额外引入依赖。

1、首先修改调用方app服务的配置文件application.xml,开启hystrix

feign:
 hystrix:
  enabled: true

2、增加服务熔断处理类,实现DmsApi接口

@Component
public class DmsHystrixImpl implements DmsApi {
    @Override
    public String findNameByCode(String code) {
        return "服务器故障";
    }
}

3、修改接口类注解,增加熔断处理类:fallback = DmsHystrixImpl.class;

(Spring Cloud Feign HTTP请求异常Fallback容错机制,它是基于Hystrix实现的,所以要通过配置参数feign.hystrix.enabled=true开启该功能)

@FeignClient(value = "dms",fallback = DmsHystrixImpl.class)
public interface DmsApi {
    @RequestMapping(value="/dict/[code]", method = RequestMethod.GET)
    public String findNameByCode(@PathVariable("code") String code);
}

4、增加异常代码,以便验证

@RestController
public class DmsController implements DmsApi {
    @Override
    public String findNameByCode(String code) {
        Integer.parseInt("a");
        switch (code){
            case "0" :
                return "男";
            case "1" :
                return "女";
            default:
                return "未知";
        }
    }
}

5、启动项目,进行验证,返回正确结果。

总结

在微服务架构中,通常会有多个服务间相互调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

如:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。为了避免雪崩效应的形成,就需要使用Hystrix。

到此这篇关于SpringCloud微服务熔断器Hystrix使用详解的文章就介绍到这了,更多相关SpringCloud Hystrix内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java修改图片大小尺寸的简单实现

    Java修改图片大小尺寸的简单实现

    这篇文章主要介绍了Java修改图片大小尺寸的简单实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot集成shiro自定义登陆过滤器方法

    springboot集成shiro自定义登陆过滤器方法

    这篇文章主要介绍了springboot集成shiro自定义登陆过滤器方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Spring Boot 动态数据源示例(多数据源自动切换)

    Spring Boot 动态数据源示例(多数据源自动切换)

    本篇文章主要介绍了Spring Boot 动态数据源示例(多数据源自动切换),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Java8中Function接口的使用方法详解

    Java8中Function接口的使用方法详解

    在 Java 8 中,Function 接口是 java.util.function 包中的一个函数式接口,函数式接口是仅包含一个抽象方法的接口,适用于 Lambda 表达式或方法引用,本文给大家介绍了Java8的Function接口的使用方法,需要的朋友可以参考下
    2024-09-09
  • MyBatisPlus自定义SQL的实现

    MyBatisPlus自定义SQL的实现

    MyBatisPlus提供了自定义SQL功能,允许开发者在Mapper接口中定义方法,并通过XML文件或注解编写SQL语句,本文详解了如何在MP中使用自定义SQL,感兴趣的可以了解一下
    2024-09-09
  • SpringBoot统一数据返回的几种方式

    SpringBoot统一数据返回的几种方式

    在Web应用程序开发中,统一数据返回格式对于前后端分离项目尤为重要,本文就来介绍一下SpringBoot统一数据返回的几种方式,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Java Thread之Sleep()案例详解

    Java Thread之Sleep()案例详解

    这篇文章主要介绍了Java Thread之Sleep()案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java实现文件分割与合并

    Java实现文件分割与合并

    这篇文章主要介绍了Java实现文件分割与合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Spring里的Async注解实现异步操作的方法步骤

    Spring里的Async注解实现异步操作的方法步骤

    这篇文章主要介绍了Spring里的Async注解实现异步操作的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 一文搞懂Java中的日期类

    一文搞懂Java中的日期类

    在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持。本文将通过示例来聊聊Java中日期类的使用,需要的可以参考一下
    2022-09-09

最新评论