Hystrix服务保护框架有 服务降级,服务熔断,服务隔离
降级就是比如一个方法突然访问了几十万次的时候,线程处理不过来,然后返回给用户一个友好的提示。
熔断一般跟降级一起用,就是给某一个方法设置一个阈值,比如1000,当它达到这个极限的时候,用服务降级给它返回一个友好的提示。
先说一下:当前类某一个方法发生雪崩效应的时候,剩下的方法也会进不去。
雪崩效应 默认情况下只有一个线程池处理所有请求,如果在高并发情况下,所有的客户端请求堆积到一个服务接口上,
就会产生所有的线程去处理该服务接口,可能会导致部分服务无法运行
隔离就是重启一个线程池,让方法隔离,重启一个线程池,与别的方法互不影响。
实现Hystrix 在需要的方法上加
@HystrixCommand(fallbackMethod = "OrderGetUserFallBack") fallbackMethod 指的是发生雪崩后返回的友好提示方法
pom 启动类前加 @EnableHystrix
<!-- hystrix断路器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
上面讲的方法实现坏处就是让代码太过冗余,下面是给它写成类
@Component
public class OrderFallback extends BaseApiService implements Orderfegin {
@Override
public User getMember(String name) {
return null;
}
@Override
public ResponseBase getUserInfo() {
return setResultError("现在访问人数过多,服务降级,请稍后重试");
}
}
@FeignClient注解不加的话会报错找不到会员member别名服务
然后加上fallback
public ResponseBase OrderGetUserInfoHyst() {
System.out.println("OrderGetUserInfoHyst"+"当前线程池名称"+Thread.currentThread().getName());
return orderfegin.getUserInfo();
}
隔离应该是将 return隔离出来 而上面那种方法连输出语句一起隔离了
Hystrix禁止服务超时时间最好不要禁掉,可以把时间设置长一点 默认的超时时间是1s,ribbon也是,测试feign超时和雪崩不要加
ribbon:
###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
ReadTimeout: 5000
###指的是建立连接后从服务器读取到可用资源所用的时间。
ConnectTimeout: 5000
hystrix:
command:
default: #default全局有效,service id指定应用有效
execution:
timeout:
#如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
isolation:
thread:
timeoutInMilliseconds: 5000 #断路器超时时间,默认1000ms