# binarycat-framework **Repository Path**: jjbit/binarycat ## Basic Information - **Project Name**: binarycat-framework - **Description**: 这是一个开源的框架集合项目,目前已包含的子项目有: 1.动态限流组件:是一个基于系统cpu负载,内存平均使用率,请求的超时率和错误率四个维度进行的动态限流组件; - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/binarycat/binarycat - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-01-21 - **Last Updated**: 2023-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # binarycat-framework ## 项目介绍 这是一个开源的框架集合项目,目前已包含的有: 1.动态限流组件 ## 项目目录结构 1. binarycat-core: 所有子项目依赖的核心项目,包含基础的bean和工具类等 2. binarycat-dynamiclimit: 基于系统负载和请求响应情况的动态限流组件 ### binarycat-dynamiclimit #### 简介 binarycat-dynamiclimit是一个基于系统cpu负载,内存平均使用率,请求的超时率和错误率四个维度进行的动态限流组件; 目前主要针对于http请求进行限流,引入该组件后,当系统面临高并发访问时,此时cpu负载,内存平均使用率,请求的超时率和错误率出现出现急剧升高,当超过一定阀值后会对对应的请求url进行限流,并不断降低其qps的阀值,当限流的四个维度的参数低于对应的阀值时,此时对应的url的qps阀值会升高,即qps阀值会处于一个动态变化的健康状态; 目前可以针对不同的url进行限流,同一个url可以按照ip进行隔离限流且可以配置多个限流策略. #### 限流架构图 ![输入图片说明](https://images.gitee.com/uploads/images/2018/0904/195708_8e7681cc_349689.png "限流架构图") #### 类图 ![输入图片说明](https://images.gitee.com/uploads/images/2018/0904/195750_81cf32ec_349689.jpeg "类图") #### 使用说明 ``` maven依赖配置: com.binarycat binarycat-dynamiclimit 1.0.0 maven仓库配置: binarycat-repository https://gitee.com/binarycat/maven/raw/master/repository ``` ``` spring.xml配置 ``` ``` java代码配置(在需要限流的方法上添加DynamicLimit注解即可,注:需要结合RequestMapping注解一起使用) package com.test.demo.limit; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.binarycat.dynamiclimit.annotation.DynamicLimit; import com.binarycat.dynamiclimit.bean.LimitPolicyEnum; @Controller @RequestMapping("/test") public class ControllerTest { @RequestMapping({"/test1"}) @ResponseBody @DynamicLimit(limitPolicy = LimitPolicyEnum.CPU_LIMIT) public String show(HttpServletRequest request) { return "OK"; } } ```