pom.xml引入jar包

    com.google.guava      guava      29.0-jre

代码

@RestControllerpublic class HelloController {    //创建令牌桶,每秒1个令牌    private RateLimiter rl = RateLimiter.create(1);    @RequestMapping("/limit")    public DefaultResult limit() {        //获取令牌,如果没有则等待至超时,本代码超时时间为0,立刻返回错误信息        boolean flag = rl.tryAcquire(0, TimeUnit.SECONDS);        DefaultResult result = new DefaultResult();        if (!flag) {            result.setCode(777);            result.setMsg("限流");        } else {            UserResult ur = new UserResult();            ur.setId(111);            ur.setUserName("测试");            result.setData(ur);        }        return result;    }}

结果

成功

限流

其他

以上写法可以给单个接口进行限流,如果想对所有接口限流,可以放在拦截器里。

如果使用Spring Cloud,可以在网关进行限流,例如zuul、gateway。不过站在业务角度来讲,限流这个事还是微服务自己来处理更好一点——仅为个人观点。

以Zuul为例,要引入“spring-cloud-zuul-ratelimit”的jar包,在配置文件中,可以进行全局限流,针对每个微服务进行单独限流,也可以针对IP限流。

尤其是在一些对外平台接口上,​限流就很重要了。

之前我所在公司就要开放几个接口给客户,一开始我们就提出了接口限流的事,但反馈的意见是会在合同里要求对方不能高频调用​。

哪想到总是有不按合同办事的客户,一客户竟然违规把接口倒手给第三方了,而第三方不知道限流这个事,就高频次地调接口。业务初期,都觉得没多少流量,所以服务器性能也弱,一下子给挤爆了​,紧急上的限流。

其实代码没多少,闹出这等事,也是相当没必要。

限流的四种方式:1固定窗口,2滑动窗口,3漏桶,4令牌桶,在接口限流的四种算法 中有介绍。

单个接口添加超时时间_SpringBoot使用Guava令牌桶对接口限流相关推荐

  1. sentinel 时间窗口_Sentinel使用令牌桶实现预热【原理源码】

    前言 Sentinel的QPS流控效果有快速失败.预热模式.排队等待.预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的. 一.流控效果源码结构 在FlowRule更新缓存时,根据配 ...

  2. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间的方法

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊 ...

  3. Feign Hystrix (HystrixCommonKey) 设置单独接口的超时时间和FallBack

    Feign设置单独接口的超时时间和FallBack(HystrixCommonKey) HystrixCommonKey生成方法:类名#方法名(入参类型)   final class Default ...

  4. Linux超时时间为0,在 Linux/Mac 下为Python函数添加超时时间

    在 Linux/Mac 下为Python函数添加超时时间 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理亲自下厨 我们在使用 requests 这类网络请求第三方库时,可以看 ...

  5. 单独某个设置feign接口的超时时间

    1.在配置文件里配置:hystrix:enabled: true feign:httpclient.enable: falseokhttp.enable: true# 开启熔断hystrix:enab ...

  6. java 接口定义超时时间,超时抛出异常,并且任务继续触发

    第一种普通线程: package com.zz.meridian;import java.util.concurrent.*;/*** java 多线程调用接口超时处理*/ public class ...

  7. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间

    我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做timeout,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊情况 ...

  8. golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流

    (给Go开发大全加星标) 来源:Che Dan https://medium.com/@dche423/micro-in-action-7-cn-ce75d5847ef4 [导读]熔断和限流机制对于大 ...

  9. 【Guava】使用Guava的RateLimiter做限流

    2019独角兽企业重金招聘Python工程师标准>>> 一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中, ...

最新文章

  1. 为什么很多人喜欢把软件装在D盘,而不是系统盘C
  2. Linux查看端口、进程情况及kill进程
  3. linux 进程内存开销,linux下查看最消耗CPU、内存的进程
  4. Spring jndi连接数据库
  5. textarea限制每行可输入固定个数的字符
  6. 动态添加控件[可重复同一控件]
  7. 【codevs1851】越狱,快速幂数学
  8. matlab 0001,2014-11-03号 MatLab初探0001
  9. 利尔达NB-IOT的PSM和eDRX低功耗模式笔记
  10. WEB安全扫描器Netsparker推荐给大家
  11. java调用数据库的基本步骤_java数据库操作基本流程和技巧
  12. “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
  13. Unity - Timeline 之 Timeline Preview and Timeline Selector(Timeline预览与Timeline选择器)
  14. Ubuntu 20.04安装微信、QQ
  15. mysql1291错误_当MySQL创建表格时出现 1291 - Column 'e_sxe' has duplicated value '?' in ENUM 错误...
  16. php模拟IP请求,如何在php中利用curl对ip进行模拟
  17. weblogic打补丁详细步骤(linux)
  18. 公司注册需要什么印章?企业刻印印章的目的是什么?
  19. Codeforces 32A A. Reconnaissance (暴力)
  20. 算法训练Day44 动态规划专题- 背包问题 | 完全背包基础知识;LeetCode518. 零钱兑换(装满背包有多少种方法,组合数);377.组合总和IV(装满背包有多少种方法,排列数)

热门文章

  1. 实事求实来看综合布线网络
  2. 通过修改注册表实现Windows 隐藏账户
  3. 网络编程五种IO模型之poll模型
  4. class std::vectorclass std::basic_stringchar,struct std::char_traitschar,class std::allocatorch
  5. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 4 Art Generation with Neural Style Transfer
  6. 调用face++平台api进行人脸识别
  7. java date 减小时_java 获取本机当前时间并对小时任意加减
  8. android 变化字体,android 字体修改
  9. 编译安装mysql5.6.16_CentOS 6.4下编译安装MySQL 5.6.16
  10. Android编译系统分析二:mm编译单个模块