Springcloud---feign--服务降级
客户端技术:整体网站负荷过大时,为了资源的更好利用
客户端微服务做一个异常处理机制
做一个FallbackFactory的实现类
package com.wang.springcloud.service;
import com.wang.springcloud.pojo.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
///实现FallbackFactory 定义降级之后的反馈逻辑
@Component
public class DeptConsumerServiceFailbackFactory implements FallbackFactory {
@Override
public Object create(Throwable throwable) {
return new DeptConsumerService() {
@Override
public boolean add(Dept dept) {
return false;
}
@Override
public Dept get(int id) {
return new Dept(id,"没有对应信息,服务关闭了","没有数据库信息");
}
@Override
public List<Dept> queryAll() {
return null;
}
};
}
}
在feignclient指定处理异常的类
package com.wang.springcloud.service;
import com.wang.springcloud.pojo.Dept;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Component
///此处fallbackFactory 指定服务降级触发之后的处理逻辑
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptConsumerServiceFailbackFactory.class)
public interface DeptConsumerService {
//这里是服务端提供的访问路径
@RequestMapping("/dept/add")
public boolean add(Dept dept);
@RequestMapping("/dept/get/{id}")
public Dept get(@PathVariable("id") int id);
@RequestMapping("/dept/list")
public List<Dept> queryAll();
}
在feign客户端开启feign服务降级处理机制
通过application.yml配置实现
server:
port: 80
#开启 feign hystrix 服务降级
feign:
hystrix:
enabled: true
eureka:
client:
register-with-eureka: false #不像eureka 注册自己
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
测试
这时候,如果请求的服务发生了异常,或者没有服务提供。都可以在客户端处理这个异常。
例如:服务端全部关闭
此时返回信息是客户端处理过的:
当启动了服务器,能够查到结果:
当查询的id不存在,就会有异常抛出,其实这里我理解应该是服务端处理异常更好
例如前一篇博文中的熔断机制
