当前位置: 首页 > 网络应用技术

Guava Ratelimit实现API当前限制,这是正确的姿势!

时间:2023-03-08 21:54:15 网络应用技术

  Guava提供的比率可以限制物理或逻辑资源的访问率。它有点像Java数据包下的Samephore,但比率控制速率,Samephore控制了并发量。

  比率的原理与令牌桶相似。它主要由许可证签发的利率定义。如果没有其他配置,则将以每秒指定的固定速度分配许可证。RateLimiter释放许可证以每秒1/允许的速度释放许可证。

  可以看出,我假设每秒请求的请求率是1。总共需要9次获得10个任务,因此,最终消耗10个任务约为9次。因此如何在实际项目中使用它?

  在实际项目中使用

  Jmeter从10个螺纹访问接口开始,测试结果如下:

  可以发现,总是只能获得6个复杂的访问。结论是获得比率的n+1许可证。创建(n)。一般来说,番石榴的比例比例相对优雅。这篇文章简单地提到了比塔仪的使用。

  翻转并发现上述方法的使用不足以使用比例仪,尽管我们可以包装服务中的比率逻辑逻辑,但控制器可以直接调用它,但是如果我们更改它:自定义方法的方法注释+表面已实现,它将更加优雅,更优雅。详细查看以下代码:

  定制注释类

  定制切割

  推荐一个春季启动基本教程和实际战斗示例:https://www.javastack.cn/categories/spring-boot/

  测试控制器类

  通过这种方式,通过自定义注释@RateLimiterAspect,它可以动态添加到需要限制的接口中。就个人而言,我认为它更优雅。

  压缩结果:

  可以看出,无论10个线程中有多少次,并发次数始终限制为6,并且实现了当前限制。

  作者:一碗米饭