服務降級
整體資源快不夠了,忍痛將某些服務先關掉,待渡過難關,再開啓回來。
修改microservicecloud-api工程,
根據已經有的DeptClientService接口新建一個實現了
FallbackFactory接口的類DeptClientServiceFallbackFactory
@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;
}
};
}
}
修改microservicecloud-api工程,DeptClientService接口在註解@FeignClient中添加fallbackFactory屬性值:
//@FeignClient(value = "MICROSERVICECLOUD-DEPT")
@FeignClient(value = "MICROSERVICECLOUD-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
Dept get(@PathVariable("id") long id);
@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
List<Dept> list();
@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
boolean add(Dept dept);
}
microservicecloud-consumer-dept-feign工程修改YML
server:
port: 80
feign:
hystrix:
enabled: true # 開啓feign對熔斷的支持
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/, http://eureka7002.com:7002/eureka/, http://eureka7003.com:7003/eureka/
測試
- 3個eureka先啓動
- 微服務microservicecloud-provider-dept-8001啓動
- microservicecloud-consumer-dept-feign啓動
訪問http://localhost/consumer/dept/get/1:
關閉microservicecloud-provider-dept-8001,再次訪問:
此時服務端provider已經down了,但是我們做了服務降級處理,讓客戶端在服務端不可用時也會獲得提示信息而不會掛起耗死服務器