Spring Cloud Hystrix
在说hystrix之前先要了解什么是服务雪崩
本质:线程没有及时回收
不管是调用成功还是失败,只要线程可以及时回收,就可以解决服务雪崩
雪崩的两种解决方法:
1.修改调用的超时时长(简单 但是不够灵活)
2.设置拦截器
提示:以下是本篇文章正文内容,下面案例可供参考
一、Spring Cloud Hystrix是什么?
熔断器,也叫断路器!用来保护微服务不雪崩的方法。能够阻止分布式系统中出现联动故障。
Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。
二、使用步骤
1.在OpenFeign中使用Hystrix
1. 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
application.yml文件的配置
server:
port: 8081 #端口号
spring:
application:
name: product-service #当前消费者的名称
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka #eureka服务地址
feign:
hystrix:
enabled: true #开启熔断 一定要注意开启
2. Application上加注解
熔断是由消费者远程调用生产者的方法时开启的拦截器
故,@EnableHystrix注解加在消费者上
3. 写实现类
2.在Ribbon中使用Hystrix
启动eureka-server
启动provider-order-service
修改consumer-user-service
- 添加Hystrix的依赖,ribbon没有集成hystrix
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
-
修改启动类(同上)
-
修改controller
/**
* 用户下单方法 ribbon的熔断
*
* @return
* @HystrixCommand(fallbackMethod = "ribbonHystrix")
* 指定熔断的方法
*/
@GetMapping("userDoOrderRibbon")
@HystrixCommand(fallbackMethod = "ribbonHystrix")
public String testRibbonHystrix(String serviceId) {
String result = restTemplate.getForObject("http:" + serviceId + "/doOrder", String.class);
System.out.println(result);
return "成功";
}
//方法签名要和原来的方法一致
public String ribbonHystrix(String serviceId) {
return "我是ribbon的备选方案";
}
2.熔断器(断路器说明)
- 熔断器的设计
当一个时间窗口内,失败次数达到阈值,熔断器开启
2. 熔断器的状态说明及状态改变
关:服务正常调用 A------> B
开:在一段时间内,调用失败次数达到阈值(例如:5s内失败3次直接return
半开:断路器打开后,过一段时间,让少许流量尝试调用B服务,如果成功则断路器关闭,使服务正常调用,如果失败,则继续半开 (随机数)