springcloud 服务降级

一.什么是服务降级

降级就是将一些不常用的服务停掉从而释放更多的资源来供应一些主要的服务使用

实现的方式

1.服务降级中有很多的方法,最好的方式就是利用 Docker 来实现,当 需要对某个服务进行降级时可以直接将这个服务的容器停掉,等到需要使用时在把这个服务重启就行。
2.通过API网关的方式进行降级这样我们的就可以将前台的一切请求全部的拒绝掉,这样就释放出来的资源供应主要功能的使用了。

三实现网关降级的思路

主要时在过滤器的软方法中通过RequestContext获取即将路由的服务的ID,通过配置信息获取降级的服务信息,如果当前的路由的服务在其中,就可以直接拒绝返回对应的信息让客户端做出相应的处理

当服务被降级的时候,直接在spirngcloud config的后台修改一下配置就可以马上生效
当然可以做成自动的,比如监控某些指标,流量,负载等。
当达到某些指标后就会自动触发降级

# filter文件中

#application中

down:
service: jwxt-learner

filter 中加入DownFilter文件

@Component
public class DownFilter extends ZuulFilter {

    @Value("${down.service}")//获取配置文件中的值
    private String BASIC_CONF;
    public  DownFilter(){
        super();
    }
    @Override
    public String filterType() {
        return FilterConstants.ROUTE_TYPE; //route
    }

    @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();
        Object serviceId=context.get("serviceId");
        if (serviceId !=null && BASIC_CONF!=null){
            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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值