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不存在,就会有异常抛出,其实这里我理解应该是服务端处理异常更好
例如前一篇博文中的熔断机制