SpringCloud提供了熔断机制,当多个服务互相关联,某个服务坏掉,会影响关联的服务导致大面积失败,称为雪崩效应。
Hystrix断路器提供了服务降级、服务隔离等机制保护系统。
- 服务降级
默认情况下,Cloud Hystrix要求1秒钟响应,超过1秒被认为失败,会自动调用“备胎”方法。
- 服务隔离机制
当服务在某个段时间内(默认5S),如果处理失败的频率达到指定比率(默认50%),这是Hystrix就要将断路器阀Open(断开服务),又过5S会将阀半开状态,如果处理成功率达到指定标准,会将断路器阀Close,未达到标准再Open。
服务降级使用方法
- 1普通服务降级使用
- 在pom.xml导入spring-cloud-starter-netflix-hystrix
- 在启动类前使用@EnableCircuitBreaker或@EnableHystrix
- 在服务处理方法前使用@HystrixCommand(fallbackMethod=“loadDirectionFallBack”)
@GetMapping("/direction/{id}")
@HystrixCommand(fallbackMethod="loadDirectionFallBack")
public YdmaResult loadDirection(@PathVariable("id")int id) {
return directionService.loadDirection(id);
}
//fallback方法参数和原服务方法保持一致
public YdmaResult loadDirectionFallBack(int id) {
YdmaResult result = new YdmaResult();
result.setCode(YdmaConstant.ERROR1);
result.setMsg(YdmaConstant.ERROR_MSG);
return result;
}
- 默认处理时间1S,可以通过下面配置改变
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000
2 Feign服务降级使用
通过feign接口模式调用服务,发生延迟或异常,默认是不会触发Hystrix服务降级的,需要进行设置和开启。
- 编写Feign接口实现类,在实现类方法中写默认FallBack返回逻辑.
提示:实现组件要追加@Component扫描标记
- 将Feign接口实现类给@FeignClient的fallback属性指定
@FeignClient(name="YDMA-DIRECTION",fallback=DirectionFeignRemoteFallBack.class)
public interface DirectionFeignRemote {
@GetMapping("/direction/get")
public YdmaResult loadDirection(int id);
@GetMapping("/direction/{id}")
public YdmaResult loadDirection1(@PathVariable("id")int id);
@GetMapping("/direction/all")
public YdmaResult loadAllDirections();
}
- 在application.properties配置中打开Feign启用Hystrix设置
在A、B、C默认结合启用,但是从D以后默认关闭,需要打开设置
feign.hystrix.enabled=true