pom依赖
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
yml
feign:
hystrix:
enabled: true #开启hystrix的服务降级(默认false,不适用hystrix的服务降级)
根据不同的异常,返回不同的信息
@Component
public class WebError implements FallbackFactory<ConsumerApi> {
@Override
public ConsumerApi create(Throwable cause) {
// TODO Auto-generated method stub
return new ConsumerApi() {
@Override
public Person postPserson(Person person) {
// TODO Auto-generated method stub
return null;
}
@Override
public String alive() {
// TODO Auto-generated method stub
System.out.println(cause.getLocalizedMessage());
cause.printStackTrace();
return ToStringBuilder.reflectionToString(cause);
}
};
}
}
信号量隔离 与 线程隔离 区别
-
隔离作用
客户端的某个模块有问题,不会影响其他的模块 -
默认情况下hystrix使用线程池控制请求隔离
-
线程池隔离技术,是用 Hystrix 自己的线程去执行调用;而信号量隔离技术,是直接让 tomcat 线程去调用依赖服务。信号量隔离,只是一道关卡,信号量有多少,就允许多少个 tomcat 线程通过它,然后去执行。
-
信号量隔离主要维护的是Tomcat的线程,不需要内部线程池,更加轻量级。
-
线程之间的数据交换消耗性能
-
线程隔离优点:
可以做失败策略
异步请求,解放woker线程阻塞
线程池内部,服务异常隔离
什么时间用信号量隔离
-
响应速度极快
-
压栈服务器性能
-
服务端业务逻辑不能出问题,否则tomcat线程会除问题
-
当线程池、tomcatheng’zhuhengzhu