服务熔断
服务熔断机制是对应服务雪崩的一种微服务链路保护机制。
在链路请求中,如果某个微服务节点不可用或者响应时间太长,可以熔断该节点的微服务调用,快速的返回错误的响应信息,当恢复正常后可正常调用。
具体配置过程
配置在 服务端(被动触发)
1、依赖
<!-- Hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
** 2、定义备选方案**
@RestController
public class DeptController {
@Autowired
private DeptService deptService;
/**
* HystrixCommand(fallbackMethod="方法名称")
* 当发生异常,调用备选方案
* @param id
* @return
*/
@GetMapping("/findById/{id}")
@HystrixCommand(fallbackMethod = "hystrixGet")
public Dept findById(@PathVariable("id")Integer id){
return deptService.findById(id);
}
/**
* 备选方案,当主方案发生异常时,就会调用这个方法
* 参数必须和主方案的方法一致
* @param id
* @return
*/
public Dept hystrixGet(Integer id){
Dept dept = new Dept();
dept.setDeptNo(id).setDeptName("没有对应的信息 -->@Hystrix").setDeptSource("no this id in db");
return dept;
}
}
在main方法中开启
测试
访问不存在的 id 时,就会触发 Hystrix 的熔断机制
服务降级
与服务熔断的区别
- 服务熔断是在 服务端 做的,服务降级是在 消费端 做的
- 服务熔断是在服务端对某个请求设置备选方案,当这个请求超时或异常,就会启用备选方案,
属于被动式触发
- 服务降级是在高请求的情况下,对某些接口的请求非常频繁,而对某些接口几乎没有请求,
这时就可以主动的停止那些请求比较低的接口,把服务器资源给请求较高的接口,当再请求那些被停止的接口时,只需给出友好的提示即可,这就是 服务降级。
具体配置过程
此处的配置是通过 Feign + hystrix 的配置
**1、在api或domain模块新建类,继承FallbackFactory **
public class ClientServiceFallbackFactory implements FallbackFactory<DeptClientServer> {
public DeptClientServer create(Throwable throwable) {
return new DeptClientServer() {
// 当降级时触发
public Dept findById(Integer id) {
return new Dept().setDeptNo(id).setDeptName("正处于高峰期,该服务已被降级处理...").setDeptSource("no database");
}
public List<Dept> findAll() {
// ...
return null;
}
public boolean addDept(Dept dept) {
// ...
return false;
}
};
}
}
2、在 feignClient 注解上指定降级的处理
3、在消费端的yml文件中开启
测试
先正常请求
现在主动关闭这个服务提供者,模拟服务降级
再次访问