Hystrix流程说明:
1:每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中.
2:执行execute()/queue做同步或异步调用.
3:判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤8,进行降级策略,如果 关闭进入步骤.
4:判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续骤.
5:调用HystrixCommand的run方法.运行依赖逻辑
5a:依赖逻辑调用超时,进入步骤8.
6:判断逻辑是否调用成功
6a:返回成功调用结果
6b:调用出错,进入步骤8.
7:计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态.
8:getFallback()降级逻辑.以下四种情况将触发getFallback调用:
(1):run()方法抛出非HystrixBadRequestException异常。
(2):run()方法调用超时
(3):熔断器开启拦截调用
(4):线程池/队列/信号量是否跑满
8a:没有实现getFallback的Command将直接抛出异常
8b:fallback降级逻辑调用成功直接返回
8c:降级逻辑调用失败抛出异常
9:返回执行成功结果
步骤一:开启hystrix
Feign已经集成了Hystrix,默认是关闭状态,需要手动开启
feign:
hystrix:
enabled: true
步骤二:创建要配置熔断的接口的实现类(降级类)
@Component
public class AdminServiceHystrix implements MyService {
@Override
public String sayHi(String message) {
return String.format(“您的网络有问题!!!”);
}
}
步骤三: 在要配置熔断的接口上使用注解,指明之前配好的降级类
@FeignClient(value = “hello-spring-cloud-service-admin”,fallback = AdminServiceHystrix.class)
public interface MyService {
@RequestMapping(“hi”)
public String sayHi(@RequestParam String message);
}
Feign中的超时时间怎么计算:
Ribbon的超时时间+hystrix的超时时间