SpringCloud-Hystrix-服务降级

服务降级是什么?

  • 整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来
  • 服务降级处理是在客户端实现完成的,与服务端没有关系

服务降级测试:

1. 编写被关闭服务的返回信息,需要实现FallbackFactory接口

@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory {
    
    
    @Override
    public Object create(Throwable throwable) {
    
    
        return new DeptClientService() {
    
    
            @Override
            public Dept queryById(Long id) {
    
    
                return new Dept().setDeptno(id)
                        .setDname("该id:"+id+"没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
                        .setDb_source("no this database in MySQL");
            }
            @Override
            public List<Dept> queryAll() {
    
    
                return null;
            }
            @Override
            public boolean addDept(Dept dept) {
    
    
                return false;
            }
        };
    }
}

2. 在DeptClientService接口的 @FeignClient注解中添加fallbackFactory属性值

  • 已知DeptClientService接口是采用feign留下的接口

在这里插入图片描述

@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
public interface DeptClientService {
    
    
        @GetMapping("/dept/get/{id}")
        public Dept queryById(@PathVariable("id") Long id); //根据id查询部门
        @GetMapping("/dept/list")
        public List<Dept> queryAll(); //查询所有部门
        @PostMapping(value = "/dept/add")
        public boolean addDept(Dept dept); //添加一个部门

        //feign 远程调用的接口,可以放在任意地方,放在api里是为了方便管理
    }

3. 在客户端开启Hystrix

在这里插入图片描述

feign:
  hystrix:
    enabled: true

4. 启动测试

  • 启动集群
  • 启动服务(生产者、服务提供者)
  • 启动客户端(服务消费者)
  • 客户端访问服务端

在这里插入图片描述

  • 关闭服务端
  • 客户端访问服务端

在这里插入图片描述


总结

  • 服务熔断是在服务端,当服务发生宕机,自动选择备用方案
  • 服务降级是在客户端,当整体资源不够时,选择关闭一些服务,当客户端想要访问被关闭的服务时,客户端会返回提示信息(备用方案)
  • 熔断需要一个方法对应一个备用方法(多个方法需要多个备用方法)
  • 降级是一个服务对应一个方法,多个方法依然对应一个备用方法
  • 熔断针对服务宕机,被迫进行的
  • 降级针对压力请求,是主动的进行的

  • 服务熔断:一般是某个服务故障或者异常引起,类似现实世界中的 “保险丝” , 当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时!
  • 服务降级:所谓降级,一般是从整体负荷考虑,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

猜你喜欢

转载自blog.csdn.net/qq_40429067/article/details/114416100