修改api类
springcloud-pai

添加异常降级工厂类DeptClientServiceFallbackFactory

  1. package org.springcloud.service;
  2. import java.util.List;
  3. import org.springcloud.pojo.Dept;
  4. import org.springframework.stereotype.Component;
  5. import feign.hystrix.FallbackFactory;
  6. // 降级
  7. /**
  8. * @author My 接口异常熔断退回 FallbackFactory
  9. */
  10. @Component
  11. public class DeptClientServiceFallbackFactory implements FallbackFactory {
  12. public DeptClientService create(Throwable cause) {
  13. return new DeptClientService() {
  14. public boolean addDept(Dept dept) {
  15. return false;
  16. }
  17. public Dept queryById(Long deptno) {
  18. return new Dept().setDeptno(deptno).setDname("id=>" + deptno + ",没有对应信息。").setDb_source("没有数据");
  19. }
  20. public List<Dept> queryList() {
  21. return null;
  22. }
  23. };
  24. }
  25. }

之前是对某一个接口进行,熔断,现在是针对整个接口类进行服务降级处理。

在接口注解使用@FeignClient中,有其他属性,如果fallbackFactory设置返回类

image.png

修改DeptClientService接口类

  1. package org.springcloud.service;
  2. import java.util.List;
  3. import org.springcloud.pojo.Dept;
  4. import org.springframework.cloud.openfeign.FeignClient;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. @FeignClient(name = "SPRINGCLOUD-PROVIDER-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class)
  9. public interface DeptClientService {
  10. @PostMapping("/dept/add")
  11. public boolean addDept(Dept dept);
  12. @GetMapping("/dept/queryById/{deptno}")
  13. public Dept queryById(@PathVariable("deptno") Long deptno);
  14. @GetMapping("/dept/queryList")
  15. public List<Dept> queryList();
  16. }

在feign服务消费方开启熔断降级

  1. #服务消费者只需要配置启动端口
  2. server:
  3. port: 8090
  4. # eureka配置
  5. eureka:
  6. client:
  7. register-with-eureka: false # 不想eureka中注册自己,消费不需要注册自己
  8. service-url:
  9. # 服务注册到哪里 打开eureka服务配置以配置中的地址为准
  10. # eureka配置好之后,开启eureka功能注解
  11. defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7001.com:7002/eureka/,http://eureka7001.com:7003/eureka/
  12. # 开启hystrix服务降级
  13. feign:
  14. hystrix:
  15. enabled: true

服务熔断是在服务提供方做的,服务降级是在服务消费者端做的

启动各个服务
image.png
正常访问
image.png
现在停止服务提供方,再进行访问测试。
image.png
不会有报错信息,而是返回设置好的降级内容信息。

服务熔断和服务降级

服务熔断:

服务端
某个服务超时或异常出现,引起熔断,类似保险丝

服务降级:

客户端
从网站整体请假负载考虑,当某个服务熔断或进行关闭,服务将不再被调用,此时可以在客户端,准备一个FallbackFactory,返回一个默认(缺省)值。
好处:服务的负载降低了,缺点是,整体的服务水平下降了,但是好歹能用,可以访问。