SpringCloud集成Hystrix熔断过程分步分解

 更新时间:2022年09月28日 09:26:39   作者:Echoo2787  
通过hystrix可以解决雪崩效应问题,它提供了资源隔离、降级机制、融断、缓存等功能。接下来通过本文给大家分享SpringCloud集成Hystrix熔断,感兴趣的朋友一起看看吧

版本:

SpringBoot 2.6.1

SpringCloud 2021.0.0

依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
	<version>2.1.6.RELEASE</version>
</dependency>

贴@EnableHystrix注解

@EnableHystrix
@SpringBootApplication
public class ConsumerOneApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerOneApplication.class, args);
    }
}

在需要熔断的接口上贴@HystrixCommand注解

@RequestMapping("/consumerOne")
@RestController
public class ControllerOne {
    @Autowired
    private RestTemplate restTemplate;
    private String providerOneName = "provider-one";
    @HystrixCommand(fallbackMethod = "fallbackMethodOne")
    @RequestMapping("/serviceOne/{msg}")
    public String serviceOne(@PathVariable("msg") String msg) {
        return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
    }
	/** 熔断回调方法 */
    private String fallbackMethodOne(String msg) {
        return "熔断一默认返回:" + msg;
    }
}

异常熔断测试

其中一个服务方抛异常,另一服务方正常返回

@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
    @RequestMapping("/serviceOne/{msg}")
    public String serviceOne(@PathVariable("msg") String msg) {
        throw new RuntimeException();
        // return "8702:" + msg;
    }
}
@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
    @RequestMapping("/serviceOne/{msg}")
    public String serviceOne(@PathVariable("msg") String msg) {
        return "8701:" + msg;
    }
}

访问结果:

超时熔断测试

全局

先配置默认超时时间为3秒(default为全局)

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000

在这里插入代码片

其中一个接口睡眠4秒

@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
    @RequestMapping("/serviceOne/{msg}")
    public String serviceOne(@PathVariable("msg") String msg) {
        try {
            Thread.sleep(4 * 1000);
            return "8702:" + msg;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "8702:" + msg;
    }
}

访问结果:

当服务方为延时返回的那个时,访问等待了3秒返回熔断默认对象

另一个正常

单个接口

除了全局外,另外给serviceTwo接口配置独立的超时时间,其余不变

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000
    serviceTwo:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000

增加一个路径为serviceTwo的接口

@RequestMapping("/consumerOne")
@RestController
public class ControllerOne {
    @Autowired
    private RestTemplate restTemplate;
    private String providerOneName = "provider-one";
    @HystrixCommand(fallbackMethod = "fallbackMethodOne")
    @RequestMapping("/serviceOne/{msg}")
    public String serviceOne(@PathVariable("msg") String msg) {
        return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
    }
    @HystrixCommand(fallbackMethod = "fallbackMethodOne")
    @RequestMapping("/serviceTwo/{msg}")
    public String serviceTwo(@PathVariable("msg") String msg) {
        return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
    }
    private String fallbackMethodOne(String msg) {
        return "熔断一默认返回:" + msg;
    }
}

测试结果:

一个为等待5秒返回结果

一个正常返回

到此这篇关于SpringCloud集成Hystrix熔断过程分步分解的文章就介绍到这了,更多相关SpringCloud Hystrix熔断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea中git如何修改commit(ChangeList的使用)

    idea中git如何修改commit(ChangeList的使用)

    这篇文章主要介绍了idea中git如何修改commit(ChangeList的使用),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 基于springboot+vue实现垃圾分类管理系统

    基于springboot+vue实现垃圾分类管理系统

    这篇文章主要为大家详细介绍了基于springboot+vue实现垃圾分类管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring Boot 2 实战:自定义启动运行逻辑实例详解

    Spring Boot 2 实战:自定义启动运行逻辑实例详解

    这篇文章主要介绍了Spring Boot 2 实战:自定义启动运行逻辑,结合实例形式详细分析了Spring Boot 2自定义启动运行逻辑详细操作技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • Spring工厂方法创建(实例化)bean实例代码

    Spring工厂方法创建(实例化)bean实例代码

    这篇文章主要介绍了Spring工厂方法创建bean实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Spring装配Bean教程之XML安装配置bean详解

    Spring装配Bean教程之XML安装配置bean详解

    大家都知道spring有多重配置方式,基于XML,基于注解,基于java类的配置,其中基于XML是最强大的一种,下面这篇文章主要给大家介绍了关于Spring装配Bean之XML安装配置bean的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • Servlet3.0实现文件上传的方法

    Servlet3.0实现文件上传的方法

    本篇文章主要介绍了Servlet实现文件上传的方法,所谓文件上传就是将本地的文件发送到服务器中保存。有兴趣的可以了解一下。
    2017-03-03
  • SpringBoot利用jackson格式化时间的三种方法

    SpringBoot利用jackson格式化时间的三种方法

    日常开发过程中经常会使用json进行数据的传输,这就涉及到了对象和json的相互转化,常用的解决方案有:Jackson(推荐)、谷歌的Gson、阿里的Fastjson,这篇文章主要给大家介绍了关于SpringBoot如何利用jackson格式化时间的相关资料,需要的朋友可以参考下
    2021-06-06
  • Java实现九宫格的简单实例

    Java实现九宫格的简单实例

    这篇文章主要介绍了 Java实现九宫格的简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • 解决mybatis 执行mapper的方法时报空指针问题

    解决mybatis 执行mapper的方法时报空指针问题

    这篇文章主要介绍了解决mybatis 执行mapper的方法时报空指针问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java ConcurrentHashMap的使用示例

    Java ConcurrentHashMap的使用示例

    这篇文章主要介绍了Java ConcurrentHashMap的使用示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04

最新评论