项目描述

有兴趣的同学可以一起来完善这个项目:项目github地址:https://github.com/1024min/valve
本项目是基于Springboot开发的限流工具starter,开箱即用。提供限流兜底扩展点和业务异常处理扩展点,便于自定义降级逻辑。

限流模式

  1. 立即拒绝:采用滑动窗口算法,精准限流
  2. 排队等待:采用漏桶算法,能设置超时时间,进行请求排队等待限流。

使用方式

  1. 打jar包到本地
  2. 引入依赖
        <dependency>
            <groupId>com.hiwei</groupId>
            <artifactId>valve-springboot-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  1. 对限流接口进行注解标记
    @GetMapping("/valve")
    @ValveResource(valveType = ValveType.REJECT,value = 5,blockHandlerClass = {
   BlockHandler.class})
    public String valve(){
   
        return "正常";
    }

自定义

  1. BlockExceptionHandler
public class BlockHandler implements BlockExceptionHandler {
   
    @Override
    public void handle(HttpServletRequest res, HttpServletResponse response, BlockException e) throws Exception {
   
        //返回json数据
        response.setStatus(500);
        response.setCharacterEncoding("utf-8");
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        new ObjectMapper().writeValue(response.getWriter(), "服务限流了");
    }
}
  1. FallBackHandler
public class MyBlockHandler implements FallBackHandler{
   
    @Override
    public void handle(HttpServletRequest res, HttpServletResponse response, BlockException e) throws Exception {
   
        //返回json数据
        response.setStatus(500);
        response.setCharacterEncoding("utf-8");
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        new ObjectMapper().writeValue(response.getWriter(), "服务异常了");
    }
}