11.3服务降级
是什么?
- 服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。--------来源百度百科
怎么用?
1. 在springcloud-api下的service层新建一个DeptClientServiceFallBackFactory类
import com.buba.springcloud.pojo.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class DeptClientServiceFallBackFactory implements FallbackFactory {
@Override
public DeptClientService create(Throwable throwable) {
return new DeptClientService() {
@Override
public Dept queryById(Long id) {
return new Dept()
.setDeptno(id)
.setDname("这个id=>"+id+"没有对应的信息,客户端掌握了降级的信息,这个服务器已经被关闭")
.setDb_source("没有数据");
}
@Override
public List<Dept> queryAll() {
return null;
}
@Override
public Boolean addDept(Dept dept) {
return null;
}
};
}
}
2. 给DeptClientService添加操作让它可以去调用DeptClientServiceFallBackFactory类
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallBackFactory.class)
public interface DeptClientService {
XXX
}
3. 在springcloud-consumer-dept-feign客户端开启降级
feign:
hystrix:
enabled: true
4.启动测试
- 访问http://localhost/consumer/dept/get/1
可以看到: - 访问http://localhost/consumer/dept/get/6
可以看到: - 关闭springcloud-provider-dept-8001提供者,访问http://localhost/consumer/dept/get/1
可以看到:
11.4小结
服务熔断:
- 服务端
- 某个服务超时或者异常就会引起熔断 类似保险丝
服务降级:
- 客户端
- 从整体的网站负载考虑
- 当某个服务熔断或者关闭之后,服务将不再被调用.
- 此时在客户端我们可以准备一个FallBackFactory,返回一个默认的值(缺省值),整体的服务水平下降了,好歹能用,比直接挂掉强