单个接口添加超时时间_SpringBoot使用Guava令牌桶对接口限流
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令牌桶对接口限流相关推荐
- sentinel 时间窗口_Sentinel使用令牌桶实现预热【原理源码】
前言 Sentinel的QPS流控效果有快速失败.预热模式.排队等待.预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的. 一.流控效果源码结构 在FlowRule更新缓存时,根据配 ...
- python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间的方法
我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊 ...
- Feign Hystrix (HystrixCommonKey) 设置单独接口的超时时间和FallBack
Feign设置单独接口的超时时间和FallBack(HystrixCommonKey) HystrixCommonKey生成方法:类名#方法名(入参类型) final class Default ...
- Linux超时时间为0,在 Linux/Mac 下为Python函数添加超时时间
在 Linux/Mac 下为Python函数添加超时时间 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理亲自下厨 我们在使用 requests 这类网络请求第三方库时,可以看 ...
- 单独某个设置feign接口的超时时间
1.在配置文件里配置:hystrix:enabled: true feign:httpclient.enable: falseokhttp.enable: true# 开启熔断hystrix:enab ...
- java 接口定义超时时间,超时抛出异常,并且任务继续触发
第一种普通线程: package com.zz.meridian;import java.util.concurrent.*;/*** java 多线程调用接口超时处理*/ public class ...
- python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间
我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做timeout,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常.(当然存在特殊情况 ...
- golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流
(给Go开发大全加星标) 来源:Che Dan https://medium.com/@dche423/micro-in-action-7-cn-ce75d5847ef4 [导读]熔断和限流机制对于大 ...
- 【Guava】使用Guava的RateLimiter做限流
2019独角兽企业重金招聘Python工程师标准>>> 一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中, ...
最新文章
- 为什么很多人喜欢把软件装在D盘,而不是系统盘C
- Linux查看端口、进程情况及kill进程
- linux 进程内存开销,linux下查看最消耗CPU、内存的进程
- Spring jndi连接数据库
- textarea限制每行可输入固定个数的字符
- 动态添加控件[可重复同一控件]
- 【codevs1851】越狱,快速幂数学
- matlab 0001,2014-11-03号 MatLab初探0001
- 利尔达NB-IOT的PSM和eDRX低功耗模式笔记
- WEB安全扫描器Netsparker推荐给大家
- java调用数据库的基本步骤_java数据库操作基本流程和技巧
- “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
- Unity - Timeline 之 Timeline Preview and Timeline Selector(Timeline预览与Timeline选择器)
- Ubuntu 20.04安装微信、QQ
- mysql1291错误_当MySQL创建表格时出现 1291 - Column 'e_sxe' has duplicated value '?' in ENUM 错误...
- php模拟IP请求,如何在php中利用curl对ip进行模拟
- weblogic打补丁详细步骤(linux)
- 公司注册需要什么印章?企业刻印印章的目的是什么?
- Codeforces 32A A. Reconnaissance (暴力)
- 算法训练Day44 动态规划专题- 背包问题 | 完全背包基础知识;LeetCode518. 零钱兑换(装满背包有多少种方法,组合数);377.组合总和IV(装满背包有多少种方法,排列数)
热门文章
- 实事求实来看综合布线网络
- 通过修改注册表实现Windows 隐藏账户
- 网络编程五种IO模型之poll模型
- class std::vectorclass std::basic_stringchar,struct std::char_traitschar,class std::allocatorch
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 4 Art Generation with Neural Style Transfer
- 调用face++平台api进行人脸识别
- java date 减小时_java 获取本机当前时间并对小时任意加减
- android 变化字体,android 字体修改
- 编译安装mysql5.6.16_CentOS 6.4下编译安装MySQL 5.6.16
- Android编译系统分析二:mm编译单个模块