SpringCloud Hystrix断路器与局部降级全面介绍
什么是Hystrix断路器
- Hystrix是Netflix发布的一款容错框架,用于处理分布式系统的延迟和容错问题。Hystrix在整合了SpringCloud项目之后,是同步、异步请求的断路器。
- 断路器是对延迟和故障的容错,当请求后端服务出现链路故障、返回超时等,断路器会直接断开请求链路,避免系统被拖垮,同时还可以提供基于失败率的自动降级功能。
Hystrix使用步骤
- maven配置:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
- 启动类加上注解@EnableCircuitBreaker
Hystrix核心组件
-
服务监控和容错的实现
-
注解@HystrixCommand:该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,当该方法发生异常时,会执行fallbackMethod指定的方法。
```java
@GetMapping("/hello")
@HystrixCommand(fallbackMethod = "fallback") //指定熔断方法
public String sayHello(@RequestParam String name){
restTemplate.getForObject("http://service-provider/hello?name=" + name,String.class);
}
//服务熔断后执行的方法
public String fallback(String name){
return "fallback: " + name;
}
```
-
监控仪表盘Hystrix Dashboard
-
maven配置
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
- 启动类上添加注解@EnableHystrixDashboard
Hystrix局部降级
如果只想让某些服务降级,可以通过配置文件设置Hystrix的默认降级处理逻辑,实现局部降级。
hystrix:
command:
#服务降级
default:
fallback.enabled: true
fallback.method.name: error
如上面的配置,表示默认开启服务降级,fallback处理降级的情况。fallback处理方法名字为error,对应的方法需要在业务层面实现。
示例一
在微服务架构中A服务需要依赖B服务的接口,B服务是一个不稳定服务,经常出现请求超时错误,容易导致服务雪崩。使用Hystrix实现服务降级,避免因B服务错误导致A服务不可用。
- 在A服务调用B服务接口的方法上添加@HystrixCommand注解,并指定fallbackMethod处理降级情况。
```java
@GetMapping("/test")
@HystrixCommand(fallbackMethod = "fallback")
public String test(){
ResponseEntity
return result.getBody();
}
//服务降级后处理的方法
public String fallback(){
return "Hello World from Service A -Fallback";
}
```
-
访问http://localhost:8080/test,此时因B服务未启动或接口超时,会执行降级方法,返回“Hello World from Service A -Fallback”。
-
控制台输出系统异常信息,正常情况下不应该出现服务A接口调用失败的信息。
示例二
当某个服务的某个方法不可用时,仅对该方法进行降级处理。
- 设置Hystrix默认降级处理策略,添加如下配置:
yaml
hystrix:
command:
default:
fallback.enabled: false
- 在需要降级处理的方法上添加@HystrixCommand注解,并设置对异常退回的处理方式,如下:
```java
@HystrixCommand(fallbackMethod="getFallback")
public User getUserById(String id) {
return restTemplate.getForObject("http://USER-SERVICE/user/{id}",User.class,id);
}
private User getFallback(String id) {
User user = new User();
user.setId(-1L);
user.setName("Default User");
return user;
}
```
如上面的代码,当getUserById方法调用异常,将会执行getFallback方法实现局部降级。
以上就是关于SpringCloud Hystrix断路器与局部降级的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud hystrix断路器与局部降级全面介绍 - Python技术站