当前位置: 首页 > wzjs >正文

武汉市青山区建设局 网站网址缩短

武汉市青山区建设局 网站,网址缩短,佛山网站页面优化,后台管理网页界面设计项目简介 rate-limit 是一个为 java 设计的渐进式限流工具。 目的是为了深入学习和使用限流,后续将会持续迭代。 特性 渐进式实现 支持独立于 spring 使用 支持整合 spring 支持整合 spring-boot 内置多种限流策略 快速开始 需求 jdk 1.7 maven 3.x ma…

项目简介

rate-limit 是一个为 java 设计的渐进式限流工具。

目的是为了深入学习和使用限流,后续将会持续迭代。

特性

  • 渐进式实现

  • 支持独立于 spring 使用

  • 支持整合 spring

  • 支持整合 spring-boot

  • 内置多种限流策略

快速开始

需求

  • jdk 1.7

  • maven 3.x+

maven 导入

<dependency><groupId>com.github.houbb</groupId><artifactId>rate-limit-core</artifactId><version>1.1.1</version>
</dependency>

入门例子

方法定义

@RateLimit 限流注解放在方法上,指定对应的限制频率。

也可以定义在类上,默认下面的所有方法生效。方法上的优先级高于类。

属性说明默认值
value方法访问一次消耗的令牌数1
timeUnit时间单位TimeUnit.SECONDS
interval时间间隔60
count可调用次数1000
enable是否启用true

默认为 60S 内,可以调用 1000 次。

public class UserService {@RateLimit(interval = 2, count = 5)public void limitCount() {log.info("{}", Thread.currentThread().getName());}}

这个例子中我们 2S 内最多调用 5 次。

代码测试

RateLimitProxy.getProxy(xxx) 通过字节码获取方法对应的方法代理。

@Test(expected = RateLimitRuntimeException.class)
public void limitCountErrorTest() {UserService userService = RateLimitProxy.getProxy(new UserService());for(int i = 0; i < 3; i++) {userService.limitCount();}
}

当调用超出限制时,默认抛出 RateLimitRuntimeException 异常。

这里默认使用的是令牌桶算法,所以会出现异常。

重复注解 @RateLimits

有时候我们希望同时做多个的限制:

(1)一分钟不超过 10 次

(2)一小时不超过 30 次

为了支持多个配置,我们引入了新的注解 @RateLimits,可以指定一个 @RateLimit 数组。

方法上同时使用 @RateLimits + @RateLimit 是可以同时生效的,不过为了简单,一般不建议混合使用。

@RateLimits({@RateLimit(interval = 2, count = 5)})
public void limitCount() {//...
}

指定引导类

RateLimitProxy.getProxy(new UserService());

等价于

RateLimitProxy.getProxy(new UserService(), RateLimitBs.newInstance());

下面我们来一起看一下 RateLimitBs 引导类。

引导类

RateLimitBs 作为引导类,便于用户自定义配置。

方法说明默认值
rateLimit限流策略RateLimits.tokenBucket() 令牌桶算法
timer时间策略Timers.system() 系统时间
cacheService缓存策略CommonCacheServiceMap 基于本地 map 的缓存策略
cacheKeyNamespace缓存KEY命名空间RATE-LIMIT 避免不同的应用,命名冲突。
configService限制配置策略RateLimitConfigService 默认基于方法上的注解
tokenService身份标识策略RateLimitTokenService 默认基于 IP
methodService方法标识策略RateLimitMethodService 默认基于方法名+参数类型
rejectListener拒绝策略RateLimitRejectListenerException 限流时抛出异常

其中 rateLimit 内置 RateLimits 工具中的策略如下:

方法说明
fixedWindow()固定窗口
slideWindow(int windowNum)滑动窗口,可指定窗口大小
slideWindow()滑动窗口,默认为 10
slideWindowQueue()滑动窗口,基于队列的实现
leakyBucket()漏桶算法
tokenBucket()令牌桶算法

配置建议

  1. 分布式系统,cacheService 建议使用基于 redis 的集中式缓存策略。

  2. configService 如果想更加灵活,可以基于数据库的配置查询

RateLimitBs 引导类

RateLimitBs 默认配置如下:

RateLimitBs.newInstance().timer(Timers.system()).methodService(new RateLimitMethodService()).tokenService(new RateLimitTokenService()).rejectListener(new RateLimitRejectListenerException()).configService(new RateLimitConfigService()).cacheService(new CommonCacheServiceMap()).rateLimit(RateLimits.tokenBucket()).cacheKeyNamespace(RateLimitConst.DEFAULT_CACHE_KEY_NAMESPACE);

spring 整合

maven 引入

<dependency><groupId>com.github.houbb</groupId><artifactId>rate-limit-spring</artifactId><version>1.1.1</version>
</dependency>

类定义

方法

和上面使用类似,直接在方法上声明 @RateLimit 注解即可。

@Service
public class UserService {private static final Log log = LogFactory.getLog(UserService.class);@RateLimit(interval = 2, count = 5)public void limitCount() {log.info("{}", Thread.currentThread().getName());}}

配置

通过 @EnableRateLimit 声明启用限流。

@Configuration
@ComponentScan("com.github.houbb.rate.limit.test.core")
@EnableRateLimit
public class SpringConfig {}

@EnableRateLimit 的属性配置和 RateLimitBs 属性是以一一对应的。

方法说明默认值
rateLimit限流策略令牌桶算法
timer时间策略系统时间
cacheService缓存策略基于本地 map 的缓存策略
cacheKeyNamespace缓存KEY命名空间RATE-LIMIT 避免不同的应用,命名冲突。
configService限制配置策略默认基于方法上的注解
tokenService身份标识策略默认基于 IP
methodService方法标识策略默认基于方法名+参数类型
rejectListener拒绝策略限流时抛出异常

这里的属性值,都是对应的 spring bean 名称,支持用户自定义。

spring-boot 整合

maven 引入

<dependency><groupId>com.github.houbb</groupId><artifactId>rate-limit-springboot-starter</artifactId><version>1.1.1</version>
</dependency>

使用

其他和 spring 保持一致。

开源矩阵

下面是一些缓存系列的开源矩阵规划。

名称介绍状态
resubmit防止重复提交核心库已开源
rate-limit限流核心库已开源
cache手写渐进式 redis已开源
lock开箱即用的分布式锁已开源
common-cache通用缓存标准定义已开源
redis-config兼容各种常见的 redis 配置模式已开源
quota-server限额限次核心服务待开始
quota-admin限额限次控台待开始
flow-control-server流控核心服务待开始
flow-control-admin流控控台待开始
http://www.dtcms.com/wzjs/423465.html

相关文章:

  • 马蜂窝旅游网站怎么做新闻头条今日新闻60条
  • a4网站建设网红推广
  • 制作网站建设规划书广告推广免费
  • 做企业礼品的网站百度 官网
  • 网站如何动态修改主页百度seo算法
  • 深圳企业网站建设费用百度seo优化关键词
  • 网站的百度快照如何做宁波谷歌seo推广公司
  • 有数据库的网站百度推广新手入门
  • 网站托管就业竞价推广托管公司价格
  • wordpress ssmay长沙seo推广外包
  • 响应式网站推广网站开发月薪多少钱
  • 洛阳霞光做网站的公司下载百度app最新版
  • 成都专业网站建设价格优化设计答案
  • 互联网电子商务网站开发技术网站建设seo优化培训
  • 泰安市建设职工培训中心电话网站百度推广关键词排名在哪看
  • wordpress 4.9.8创建侧边栏企业网站优化方案
  • 做网站用什么ide网络广告名词解释
  • 网站管理系统后台不能发布文章了关闭站长工具seo综合查询
  • wordpress获取版权声明长沙关键词优化新报价
  • php做网站页面排名seo公司
  • 注册公司流程和费用注册资金武汉seo报价
  • b2b网站建设费用搜索引擎网址
  • 网站建设模板登录界面sem托管公司
  • 品牌设计公司标志设计seo推广是什么
  • 网站推广的方案设计怎么写seo在线优化平台
  • 网站建设与设计ppt模板大连做优化网站哪家好
  • 打开网站弹出qq推广软文200字
  • 音乐网站制作教程网站建设黄页免费观看
  • 网站建设傲鸿百度seo外包
  • 网站开发啊福建优化seo