整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。服务降级处理是在客户端实现完成的,与服务端没有关系。
1、修改公共工程microservicecloud-api
(1)、在注解@FeignClient中添加fallbackFactory属性值
//fallbackFactory用来指定处理服务降级的类
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {
}
(2)、新建FallbackFactory接口的实现类DeptClientServiceFallbackFactory
//Hystrix服务降级
@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> {
@Override
public DeptClientService create(Throwable throwable) {
return new DeptClientService() {
@Override
public Dept get(long id) {
return new Dept().setDeptno(id).setDname("该ID:" + id + "没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
.setDb_source("no this database in MySQL");
}
@Override
public List<Dept> list() {
return null;
}
@Override
public boolean add(Dept dept) {
return false;
}
};
}
}
2、修改feign工程的yml配置
feign:
hystrix:
enabled: true
3、先启动3个eureka集群后,启动部门提供者8001工程,再启动feign工程。
http://localhost:9002/consumer/dept/get/1
关闭部门提供者8001工程。http://localhost:9002/consumer/dept/get/2
此时服务端provider已经down了,但是我们做了服务降级处理,让客户端在服务端不可用时也会获得提示信息而不会挂起耗死服务器。