令牌桶算法是一种对请求限流的有效算法,核心思想是,一定时间内产生固定数量的令牌,拿到该令牌的请求可以通过,进行业务处理,没有拿到令牌的请求需要等待,直到新的令牌产生并领到该令牌,才可以通过,否则一直被阻塞或一定时间后拒绝。

       令牌桶算法相比漏斗算法,更加灵活、可控制。在java中,Google的Guava中有对令牌桶算法的实现,我们可以直接拿过来使用:

1. 依赖

        <!-- google开源工具类,包含令牌桶算法 --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.2-jre</version></dependency>

2. 使用

 //创建令牌桶实例,30指一开始最大有30个令牌,并且每次生成30个private RateLimiter rateLimiter = RateLimiter.create(30);@GetMapping("/sale")public AjaxResponse sale(Integer id){AjaxResponse ajax = AjaxResponse.newSuccess();try {//1.没有获取到token请求一直直到获取到token令牌//logger.info("等待时间 : " + rateLimiter.acquire());   //会一直等待//2.设置一个等待时间,如果在等待的时间内获得到了token令牌,则处理业务,如果在等待时间内没有获取到token则抛弃//最多等待3秒钟,3秒钟后还拿不到令牌就被抛弃if(!rateLimiter.tryAcquire(3, TimeUnit.SECONDS)){ajax.setData("失败 !当前请求被限流,直接被抛弃");return ajax;}try {//一些自己的业务//............ajax.setData("SUCCESS!");return ajax;}catch (Exception e){e.printStackTrace();return AjaxResponse.newInstance(500,e.getMessage());}}catch (Exception e){e.printStackTrace();return AjaxResponse.newInstance(500,e.getMessage());}}

我们可以看到核心的两个调用,一个是 rateLimiter.acquire() ,类似于悲观锁,没有拿到令牌的请求会一直被阻塞,直至拿到了令牌、另一个是 rateLimiter.tryAcquire(3, TimeUnit.SECONDS) ,指没有拿到令牌的请求最多等待3秒钟,3秒之后拿到令牌返回true,没有返回false,可以根据的业务场景进行开发。
       相对于springcloud,有专门的 hytrixsentinel 来进行限流和频率限制更加厉害。如果只是单纯普通的springboot项目,使用guava中的令牌桶算法来对请求进行限流是一种不错的方式。

Springboot项目中通过谷歌的guava实现令牌桶算法,来进行请求限流相关推荐

  1. SpringBoot基于guava集成令牌桶算法

    SpringBoot基于guava集成令牌桶算法 一.什么是令牌桶 1.令牌桶 2.功能图 二.Guava 1.简单介绍 2.pom引入 3.限速器 4.浅析重载方法 三.系统应用 1.单个接口应用 ...

  2. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  3. Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?

    Spring-Boot:Spring-Boot写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的 ...

  4. 使用IDEA在SpringBoot项目中连接数据库

    使用IDEA在SpringBoot项目中连接数据库 文章目录 使用IDEA在SpringBoot项目中连接数据库 前言 连接数据库 正常操作数据库 移除数据库连接 前言 每次我在 IDEA 中用 Sp ...

  5. IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

    springboot项目中properties配置文件中,运行时中文乱码情况 file encoding里边进行设置,设为utf-8并勾选转为ascii,分别在setting.setting for ...

  6. springboot项目中pom.xml文件的颜色变成灰色,图标变成蜘蛛图形

    问题 今天springboot项目中pom.xml文件的图标突然变成蜘蛛图案,pom.xml的内容大量报红,但项目任然可以正常运行 解决方法 点击idea右侧的 AntBuild,找到pom.xml, ...

  7. springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程

    springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...

  8. springboot项目中mybatis实现数据的基本查询

    SpringBoot项目中mybatis实现数据的基本查询 本章内容概述: mapper 查询 xml 文件基本使用 通过 mybatis 实现一条数据的查询 1 用户数据表 2 用户信息对应的实体类 ...

  9. SpringBoot项目中遇到的BUG

    1.启动项目的时候报错 1.Error starting ApplicationContext. To display the auto-configuration report re-run you ...

最新文章

  1. ocr识别技术-车牌识别一体机的核心关键
  2. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )
  3. VC++图像存取总结
  4. linux shell mysql备份_linux shell 备份mysql 数据库
  5. 【知识星球】猫猫狗狗与深度学习那些事儿
  6. php 代码 自动检查工具下载,PHP_CodeSniffer安装和使用教程(自动代码检查规范工具)...
  7. 用户 与组的相关练习
  8. 中国软件服务业政策和形势_赵小凡
  9. POI导出echarts统计报表到Excel
  10. php html转ubb,PHP HTML转UBB函数
  11. [[机缘参悟-87]:每个人需要了解自己的性格特征(老虎、孔雀、考拉、猫头鹰、变色龙)
  12. Apple 好莱坞艳照门的安全分析
  13. 2019最新前端薪资报告来啦!前端的工资到底有多高?其实真相是这样的......
  14. matlab实现模糊控制器并仿真,用Matlab实现空调温度模糊控制器的设计与仿真.pdf...
  15. 多线程(之五:线程协作)
  16. 全志 V85x E907 RISC-V小核开发与使用
  17. php注册路由,thinkphp动态注册路由
  18. pb从数据窗口获得数据的方法总结(转自颜建荣ID:jeron1999)
  19. 电子电气架构——面向服务的新型电子电气架构
  20. 【游戏精粹】AI个性化决策系统

热门文章

  1. 聊天室的服务端和客户端实现多人聊天
  2. Nginx代理,Nginx负载均衡,ssl原理
  3. astropy对fits文件的基础操作
  4. 台式计算机windows7系统怎么做,手把手教你台式机怎么装系统
  5. auto.js pro 解除限制
  6. [MtOI2019]幽灵乐团
  7. su组件在什么窗口_如何在草图大师SketchUp中创建窗口组件?
  8. 自定义列表li项目符号
  9. 【为谁痴来为谁狂?为谁两眼泪汪汪?】
  10. “颜值经济”当前,医美行业在快手是一片蓝海是火海?