Java如何实现限流器处理Rest接口请求
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要为大家展示了"Java如何实现限流器处理Rest接口请求",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java如何实现限流器处理Rest接口请
千家信息网最后更新 2025年11月17日Java如何实现限流器处理Rest接口请求
这篇文章主要为大家展示了"Java如何实现限流器处理Rest接口请求",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java如何实现限流器处理Rest接口请求"这篇文章吧。
Maven依赖
com.google.guava guava 31.0.1-jre
代码
上代码,不废话。
首先是限流器代码。
package com.huyi.csdn.tools.rate; import com.google.common.util.concurrent.Monitor;import com.google.common.util.concurrent.RateLimiter; import java.util.concurrent.ConcurrentLinkedQueue;import java.util.function.Consumer; /** * @Program: csdn @ClassName: RequestRateLimiter @Author: huyi @Date: 2021-10-30 22:16 @Description: * 请求限流器 @Version: V1.0 */public class RequestRateLimiter { // 请求队列 private final ConcurrentLinkedQueue bucket = new ConcurrentLinkedQueue<>(); // 队列上限 private static final int BUCKET_CAPACITY = 100; // 漏桶下沿水流速度 private final RateLimiter rateLimiter = RateLimiter.create(10.0D); // 请求监视器 private final Monitor requestMoniter = new Monitor(); // 处理监视器 private final Monitor handleMoniter = new Monitor(); /** 请求实体 */ public static class Request { private int data; public Request(int data) { this.data = data; } @Override public String toString() { return "Request{" + "data=" + data + '}'; } } public void submitRequest(int data) { this.submitRequest(new Request(data)); } public void submitRequest(Request request) { // 请求监视器,创建监视向导,队列数据量小于上限 if (requestMoniter.enterIf(requestMoniter.newGuard(() -> bucket.size() < BUCKET_CAPACITY))) { try { boolean result = bucket.offer(request); if (result) { System.out.println("成功向队列加入新的请求!" + Thread.currentThread() + " request:" + request); } else { System.out.println("加入新请求失败!"); } } finally { requestMoniter.leave(); } } else { // 队列已满 // System.out.println("请求队列已经上限,请稍后重试!"); } } // 处理请求方法 public void handleRequest(Consumer consumer) { if (handleMoniter.enterIf(handleMoniter.newGuard(() -> !bucket.isEmpty()))) { try { // 匀速处理 rateLimiter.acquire(); consumer.accept(bucket.poll()); } finally { handleMoniter.leave(); } } }} 代码说明
1、有个长度100的任务队列,增加了监视器。
2、添加了限流器,限流为10。
验证代码
package com.huyi.csdn.tools.rate; import java.time.LocalTime;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream; /** * @Program: csdn @ClassName: TestRateLimiter @Author: huyi @Date: 2021-10-30 * 22:35 @Description: @Version: V1.0 */public class TestRateLimiter { private static final AtomicInteger DATA = new AtomicInteger(0); private static final RequestRateLimiter HANDLE = new RequestRateLimiter(); public static void main(String[] args) { IntStream.range(0, 10) .forEach( (x) -> new Thread( () -> { while (true) { HANDLE.submitRequest(DATA.getAndIncrement()); try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }) .start()); IntStream.range(0, 20) .forEach( (x) -> new Thread( () -> { while (true) { HANDLE.handleRequest( y -> System.out.println( LocalTime.now() + ":处理数据 -> " + y.toString())); } }) .start()); }}验证执行结果
以上是"Java如何实现限流器处理Rest接口请求"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
处理
队列
限流器
监视
代码
监视器
接口
上限
内容
篇文章
数据
学习
帮助
验证
成功
上代
任务
向导
实体
废话
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖南财务软件开发
网络安全题库最新
java怎么实现软件开发
数据库技术基础课程图
数据库数据库表如何设计
360网络安全密钥是什么
违法网络安全
三级网络技术算中级
广东专业服务器散热器生产云主机
我的世界云服务器版本升级教程
js如何连接数据库
小米的客户数据库模型
麻将软件开发常用解决方案
潍坊应用软件开发定制
计算机网络技术学位
单片机好学还是软件开发
网络技术和大数据的关系
网络安全的心得体会500
常见的网络安全攻击类型
软件开发时间大概
polardb数据库怎么关闭
磐石网络技术辅导老师
西工大17春网络安全答案
2021中国x86服务器市场
互联网科技消息观察
互联网产业和深科技
网络安全宣传知识手抄报复印
奥讯网络技术有限公司
罗湖做商城软件开发
查询数据库字符长度大于2的数据