文章目录
一、hystrix介绍
分布式系统存在的问题
如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者响应或超时. 在搞负载场景下,如果不做任何处理,此类问题可能导致服务消费者的资源耗竭甚至整个系统崩溃.
所以会引发一个问题,当依赖的服务不可用的时候,服务自身是否会被拖垮,崩溃.
在微服务中把这种 “基础服务故障” 导致 “联级故障” 的现象称为 雪崩效应
什么是Hystrix
spring-cloud的微服务解决这个雪崩问题 引入了Hystrix
Hystrix 是由 Netflix 开源的一个延迟和容错库, 用于隔离访问远程系统,服务或者第三方库,防止联级失败,从而提升系统的可能性与容错性.
hystrix功能
服务降级
服务熔断
服务限流
接近实时的监控
二、hystrix简单实例
在之前feign的项目基础上集成
本案例地址
[git案例地址]
pom
<!-- hystrix依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
启动类配置
@EnableHystrix

1、ribbon使用hystrix
使用hystrix 主要是使用 @HystrixCommand 注解
配置如果熔断返回的方法
/**
* 熔断方法
* ribbon
*/
public String getRibbonDefaultInfo() {
return "ribbon 类型 服务熔断";
}
ribbon使用hystrix比较简单 这里逻辑是偶数请求走熔断
@GetMapping("ribbon")
@HystrixCommand(fallbackMethod = "getRibbonDefaultInfo")
public String ribbon() throws InterruptedException {
String result = "";
//定义了一个常量来模拟 超时请求和正常请求
if (NUM % 2 == 0) {
NUM += 1;
System.out.println("线程模拟熔断 睡眠3秒");
/**
* 熔断的默认配置是1s没有响应就算失败 走熔断方法
*/
Thread.sleep(3000);
} else {
NUM += 1;
result = restTemplate.getForObject("http://eureka-client/ribbon", String.class);
}
System.out.println("当前请求次数 NUM:" + NUM);
return result;
}
测试和结果
http://localhost:9102/ribbon

熔断请求

2、fegin使用hystrix
application.yaml 开启fegin的hystrix配置

Feign是以接口形式工作的,没办法直接使用方法返回
spring-cloud默认已为Feign整合了Hystrix,只要Hystrix在项目的classpath中,Feign默认就会用断路器包裹所有方法
FallbackService
/**
* feign的熔断方法
* @Author: qiuwei@19pay.com.cn
* @Date: 2019-12-06.
*/
@Component
public class FallbackService implements ConsumerService {
@Override
public String consumer() {
return "Feign的熔断方法";
}
}
在 ConsumerService配置

测试结果
修改 provider-bak项目
模拟熔断 超时3秒

http://localhost:9102/consumer

熔断结果

三、源码
参考 : <<Spring Cloud 与Docker微服务架构实战>>
本文介绍了Hystrix作为Netflix开源的延迟和容错库,在Spring Cloud微服务架构中如何解决雪崩效应,通过服务降级、熔断和限流等功能提升系统稳定性和容错性。文中详细解析了Hystrix在Ribbon和Feign中的具体实现,并提供了测试结果。
725

被折叠的 条评论
为什么被折叠?



