springcloud 降级

降级的概念

就是项目的整体资源不够所以狠心关掉一个服务等服务资源够的时候在开启
比如一个题库系统分为老师段和学生段 老师段可以录入题 发布试卷 等等 学生段只能考试
老师段点击开始考试 这时学生段的流量很大那我们只能很心把老师段的服务停掉

配置application.yml文件

在zuuls(网管)application.yml文件里面加一个这个是你要降级的服务名称项目我们要降级的是student服务

down:
  service: jwxt-students

在zuuls项目里面filter文件下创建一个DownFilter类

//降级
@Component
public class DownFilter extends ZuulFilter {

// 无参数构造方法
    public DownFilter(){
        super();
    }
    //获取yml里面的dow.service
    @Value("${down.service}")
    private String BASIC_CONF;

    //拦截规则 前置 后置 路由 异常
    @Override
    public String filterType() {
        return FilterConstants.ROUTE_TYPE;
    }

    //过滤器拦截顺序
    @Override
    public int filterOrder() {
        return 1;
    }

    //过滤器是否要执行
    @Override
    public boolean shouldFilter() {
        Object isSuccess = RequestContext.getCurrentContext().get("isSuccess");
        return isSuccess==null ? true : Boolean.parseBoolean(isSuccess.toString());
    }

    @Override
    public Object run() throws ZuulException {
        
        //获取当前的上下文
        RequestContext context=RequestContext.getCurrentContext();
        
        //获取当前接口的id  (通过id获取当前服务的名称)
        Object serviceId = context.get("serviceId");

        if (serviceId !=null && BASIC_CONF !=null){

            //yml里面的服务名称进行逗号分隔
            List<String> serviceIds = Arrays.asList(BASIC_CONF.split(","));

            //如果当前我们要拦截的服务名在里面就降级
            if (serviceIds.contains((serviceId.toString()))){
                //拒绝访问服务个·
                context.setSendZuulResponse(false);

                //动态开启过滤器
                context.set("isSuccess",false);

                //给前台响应的数据
                Result result=new Result(ResultCode.SERVICE_IS_DOWN);

                //发送数据包
                context.setResponseBody(JSON.toJSONString(result));

                //编码集句
                context.getResponse().setContentType("application/json;charset=utf-8");

            return null;
            }
        }
        return null;
    }

现在启动前台访问stduent项目里面的接口 发现没有数据这声明已经降级成功
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值