项目描述
有兴趣的同学可以一起来完善这个项目:项目github地址:https://github.com/1024min/valve
本项目是基于Springboot开发的限流工具starter,开箱即用。提供限流兜底扩展点和业务异常处理扩展点,便于自定义降级逻辑。
限流模式
- 立即拒绝:采用滑动窗口算法,精准限流
- 排队等待:采用漏桶算法,能设置超时时间,进行请求排队等待限流。
使用方式
- 打jar包到本地
- 引入依赖
<dependency>
<groupId>com.hiwei</groupId>
<artifactId>valve-springboot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- 对限流接口进行注解标记
@GetMapping("/valve")
@ValveResource(valveType = ValveType.REJECT,value = 5,blockHandlerClass = {
BlockHandler.class})
public String valve(){
return "正常";
}
自定义
- 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(), "服务限流了");
}
}
- 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(), "服务异常了");
}
}