千家信息网

Java如何实现限流器处理Rest接口请求

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"Java如何实现限流器处理Rest接口请求",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java如何实现限流器处理Rest接口请
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 互联网科技有限公司 科技创新与互联网经济 互联网电商科技 互联网科技小贷 狮子座互联网科技培训 科技类的互联网平台 衡水科技产业互联网平台 济南和联互联网科技有限公司 博兴的互联网电子科技公司 成都玖崟互联网科技有限公司乐商圈怎么样 西藏七维空间互联网科技有限公司 世界互联网科技公司市值排名 成都互联网科技公司工作好不好 996高科技互联网公司 用友工业互联网科技发展 特约风豹互联网科技为什么扣费 济南有互联网科技公司吗 长沙互联网科技 陕西彩京云互联网科技有限公司 互联网科技快速发展优美句子 手冲咖啡和咖啡机区别 互联网科技公司华为 浩特互联网科技 上海致骋互联网科技 润盈互联网科技 顺网科技2021年互联网排名 湖南洣水互联网科技有限公司扣款 长沙茂晟互联网科技有限公司 济南小医互联网科技有限公司招聘 互联网科技大佬云集
0