SpringCloud:Hystrix服务降级实现(存疑)

郎家岭伯爵 2022年06月21日 390次浏览

背景

前面我们使用Hystrix实现了服务熔断,本文我们将继续使用Hystrix实现服务降级

服务降级

服务降级通常有两种场景:

  • 当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度;
  • 当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户。

通过以上两种场景,其实我们可以理解为服务熔断也是服务降级的一种。从业务来上来看,熔断和降级通常是一起出现的。因为下游服务不可用时,这个时候为了对最终用户负责,就需要进入上游的降级逻辑了。因此,将熔断视为降级的一种,也是可以说的通的。

实现

本文是基于上一篇的代码来进行的。

springcloud-api

创建DeptClientServiceFallbackFactory

package com.langjialing.springcloud.service;

import com.langjialing.springcloud.pojo.Dept;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.context.annotation.ComponentScan;

import java.util.List;

@ComponentScan
public class DeptClientServiceFallbackFactory implements FallbackFactory {

    /*
        本案例中仅提供了queryId()的降级,其它两个相同操作
     */
    
    @Override
    public DeptClientService create(Throwable cause) {
        return new DeptClientService() {
            @Override
            public Dept queryById(Long id) {

                Dept dept = new Dept();
                dept.setDeptno(id);
                dept.setDname("id => " + id + ",没有对应的信息,服务端提供了降级的信息,这个服务现在已经被关闭。");
                dept.setDb_source("No Database!");

                return dept;
            }

            @Override
            public List<Dept> queryAll() {
                return null;
            }

            @Override
            public boolean addDept(Dept dept) {
                return false;
            }
        };
    }
}

修改DeptClientService

springcloud-consumer-dept-80-feign

修改application.yaml

功能测试(存疑)

启动模块:

注:

  • 服务消费者需启动springcloud-consumer-dept-80-feign模块,因为这个模块支持feign
  • 服务提供者启动springcloud-provider-dept-xxx模块(没有Hystrix功能的模块);
  • Eureka注册中心正常启动。

注:

  • 在服务提供者8001关机时,这里应该返回fallbackFactory = DeptClientServiceFallbackFactory.class的内容,但博主这里一直返回错误页面,有了解问题所在的大佬烦请在评论区指出,或者邮件指点下博主。

总结

使用Hystrix@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class),可开启服务降级功能。

但博主的测试代码未能实现降级功能,如有大佬了解原因烦请指点一下。

接下来我们将继续介绍HystrixDashboard流监控

捐赠页面示例