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秒返回结果
一个正常返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringCloud微服务课程说明 1 网站架构演变过程 1 传统架构 1 分布式架构 1 SOA架构 1 微服务架构 2 微服务架构产生的原因 2 漫谈微服务架构 2 什么是微服务 2 微服务架构特征 3 微服务架构如何拆分 3 微服务架构与SOA架构区别 3 SpringCloud微服务框架 3 为什么选择SpringCloud 4 SpringCloud简介 4 服务治理SpringCloud Eureka 5 什么是服务治理 5 服务注册与发现 5 搭建注册中心 6 常用注册中心框架 6 注册中心环境搭建 6 注册服务提供者 8 服务消费者 11 高可用注册中心 14 Eureka高可用原理 14 Eureka集群环境搭建 14 Eureka详解 17 使用Eureka闭源了闭源了怎么办? 21 使用Consul来替换Eureka 21 使用Zookeeper来替换Eureka 25 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 28 客户端负载均衡器 29 客户端负载均衡器 29 Ribbon与Nginx区别 29 RestTemplate 31 请求类型 31 负载均衡器源码分析 33 负载均衡器重试机制 33 服务保护机制SpringCloud Hystrix 33 微服务高可用技术 33 服务降级、熔断、限流概念 34 服务学崩效应 34 服务降级 34 服务熔断 35 服务隔离 35 服务限流 36 Hystrix简单介绍 36 Hystrix环境搭建 37 Maven依赖信息 37 开启Hystrix断路器 37 服务降级处理 38 Hystrix仪表盘 39 Turbine集群监控 39 声明式服务调用SpringCloud Feign 39 feign介绍 39 环境搭建 40 Maven依赖信息 40 feign客户端接口 40 feign继承特性 41 创建springcloud-2.0-parent 42 Ribbon配置 45 配置Feign客户端超时时间 45 Api网关服务SrpingCloud Zuul 45 网关分类 46 网关设计 46 网关框架 48 网关作用 49 网关与过滤器区别 49 Nginx与Zuul的区别 49 Zuul网关 49 动态网关 53 网关集群 55 分布式配置中心SrpingCloud config 57 SpringCloud分布式配置中心 57 Config架构 58 Git环境搭建 58 服务端详解 58 Maven依赖信息 58 application.yml配置 59 项目启动 60 客户端详解 60 Maven依赖信息 60 bootstrap.yml 61 读取配置文件 62 动态刷新数据 62 actuator端点刷新数据 63 Maven依赖信息 63 Bootstrap.xml新增 63 include: "*" 63 生效前提 63 private String itmayieduInfo; 63 当配置更改时,标有@RefreshScope的Bean将得到特殊处理来生效配置 64 手动刷新接口 64 分布式服务跟踪SpringCloud sleuth 64 什么是Sleuth 64 环境搭建 64 构建server-zipkin 64 会员服务 65 订单服务 65 Swagger2API接口管理 65 课题引入 65 传统的API文档编写存在以下几个痛点: 66 Swagger具有以下优点 66 Swagg er 2.0 集成配置 66 Maven依赖信息 66 SwaggerConfig 68 Zull整合Swagger管理微服务所有API 68 会员和订单引入Maven依赖 68 ZuulGateway网关 69

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值