`
raymond.chen
  • 浏览: 1438191 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Guava的RateLimiter类实现限流功能

 
阅读更多

常用的限流算法有漏桶算法和令牌桶算法:

        漏桶算法(Leaky Bucket):请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。

        令牌桶算法(Token Bucket):以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务。

 

Guava的RateLimiter类基于令牌桶算法实现流量限制。获取令牌的方式有两种:阻塞等待令牌或者取不到立即返回失败。

 

Guava有两种限流模式,一种为稳定模式(SmoothBursty:令牌生成速度恒定),一种为渐进模式(SmoothWarmingUp:令牌生成速度缓慢提升直到维持在一个稳定值)

 

public class RateLimiterTest {
    private static int threadCount = 10; //线程数
    
	public static void main(String[] args) {
		ExecutorService executorService = Executors.newCachedThreadPool();
		
		//限速器:速率是每秒生成3个许可
		RateLimiter rateLimiter = RateLimiter.create(3);
		
		for(int i=0; i<threadCount; i++){
			executorService.submit(() -> {
				//返回等待时间
				double d = rateLimiter.acquire(); //获取一个许可,可能要等待
				System.out.println(Thread.currentThread().getName() + ": " + d);
				
				//非堵塞地尝试获取许可,如果获取到则返回true,否则返回false
//				boolean b = rateLimiter.tryAcquire(); 
			});
		}
		
		executorService.shutdown();
	}
}

 

分享到:
评论

相关推荐

    基于Zookeeper和guava动态限流 源码

    Guava的RateLimiter可以通过Zookeeper获取和更新限流参数,使得限流规则可以在多个节点之间保持一致,从而实现动态限流。 在实际应用中,我们首先需要在Zookeeper上设置限流的配置,比如每个时间窗口内允许的请求...

    分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket1

    1. **Guava RateLimiter**:Guava库中的RateLimiter提供了基于令牌桶算法的限流功能,可以限制每秒处理的请求数量。例如,`RateLimiter.create(400)` 创建了一个每秒允许400个请求的限流器。然而,这种方法在分布式...

    令牌桶算法,漏桶算法,与计数器算法限流算法与Guava RateLimiter源码解析.docx

    本文重点讨论了三种限流算法:令牌桶算法、漏桶算法和计数器算法,并深入解析了Google Guava库中的RateLimiter类,它是基于令牌桶算法的实现。 1. **令牌桶算法**: - 令牌桶算法的核心思想是系统以恒定速率向桶中...

    读书笔记:微服务架构实战篇五Spring boot2.x + Guava 并使用RateLimiter秒杀限流.zip

    读书笔记:微服务架构实战篇五Spring boot2.x + Guava 并使用RateLimiter秒杀限流

    基于RateLimiter和Lua脚本限量控制实现分布式限流.docx

    除了基于`RateLimiter`的限速控制外,另一种常用的限流方式是使用Lua脚本来限制一定时间窗口内的访问量。这种方案相对宽松,不对访问速度做出严格限制,而是关注一段时间内的访问总量是否超出阈值。 ##### 4.1 Lua...

    ratelimiter-starter.zip

    Guava的RateLimiter是Java领域广泛使用的限流工具,它基于令牌桶算法实现。通过预先设定每秒生成令牌的数量,当请求到来时,需要先获取令牌,无令牌则等待,达到限流效果。"ratelimiter-starter"可能就是基于Guava ...

    java实现限流,封装的工具类

    本文将深入探讨如何利用Java实现限流,并关注于使用Semaphore作为令牌桶和漏桶算法的实现,以及在数据线程数量限制上的应用。 首先,我们需要了解限流的基本概念。限流的主要目标是确保系统在高负载下仍能保持稳定...

    Java编程guava RateLimiter实例解析

    RateLimiter是Guava库中的一个类,它实现了令牌桶算法,主要用于流量控制和过载保护。在本文中,我们将深入探讨RateLimiter的工作原理及其在实际应用中的示例。 令牌桶算法是一种流量整形和流量控制算法,它通过...

    RateLimit-使用guava来做接口限流代码示例

    在本文中,我们将使用 Guava 库来实现 RateLimit,主要介绍了 RateLimit 的概念、常用的限流算法、Guava 中的 RateLimiter 工具类的使用。 一、问题描述 在现实生活中,我们经常会遇到一些突发的情况,例如某天 A ...

    基于RateLimiter的令牌桶算法实现限速控制和计算法实现限流控制

    在base-spring-boot-master这个项目中,我们可以预期看到相关配置和实现代码,比如定义拦截器、初始化RateLimiter实例,以及处理限流逻辑的代码片段。然而,由于未进行压力测试,对于高并发场景,开发者需要自行验证...

    springboot通用限流代码

    本篇将详细介绍如何在Spring Boot中实现通用限流,包括集成Guava和Sentinel等流行的限流库,并探讨如何将限流功能插件化,便于复用和管理。 首先,我们来看Guava限流。Guava的RateLimiter是一个简单而强大的工具,...

    Java限流实现

    在Java中,我们可以使用开源库如Guava的RateLimiter或Hystrix的Command限流功能来实现限流。SpringMVC框架提供了集成这些库的方法,例如通过AOP(面向切面编程)来实现全局的限流。 3. **Guava的RateLimiter**:...

    详解Java分布式IP限流和防止恶意IP攻击方案

    分布式IP限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足。但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为力。 为解决这个问题,本文介绍了...

    限流代码脚本

    在Java中,Spring Cloud Gateway 提供了RateLimiter过滤器,可以基于Guava的RateLimiter实现限流。 以下是一个简单的Python限流示例,使用了`ratelimiter`库: ```python from ratelimiter import RateLimiter # ...

    SpringCloud Zuul过滤器和谷歌Gauva实现限流

    在本篇文章中,我们将主要介绍如何使用 SpringCloud Zuul 过滤器和谷歌 Guava 实现限流。限流是指对服务的并发请求数量进行限制,以避免服务崩溃或性能下降。在当前的微服务架构中,限流是一种非常重要的机制,能够...

    springboot+redis实现网站限流和接口防刷功能.zip

    - **分布式限流**:在多实例环境下,需要考虑分布式限流,例如使用Redis的分布式锁或者基于Guava的RateLimiter实现分布式限流。 - **自定义限流策略**:根据业务需求,可以扩展限流策略,比如基于IP、用户、会话等...

    不加密Google Guava视频教程.txt

    ├─Google Guava 第25讲-Guava之RateLimiter在漏桶限流算法中的使用.wmv ├─Google Guava 第26讲-Guava之RateLimiter令牌桶算法的使用.wmv ├─Google Guava 第27讲-ListenableFuture,FutureCallBack讲解.wmv ...

    vivttb.zip

    本示例“vivttb.zip”提供了一个使用Java和Spring MVC实现的RateLimiter限流策略的演示。下面将详细介绍这个话题,以及如何在实际应用中实施。 一、RateLimiter简介 RateLimiter是Google Guava库提供的一种工具,...

    rate-limiter:限制瞬时发并发数限制某个接口的时间窗口最大请求数 限流实现

    RateLimiter限流普及限流是对出入流量进行控制 , 防止大量流入,导致资源不足,系统不稳定。限流系统是对资源访问的控制组件 , 控制主要有两个功能 , 限流策略和熔断策略,对不同的系统有不同的熔断策略诉求,有...

Global site tag (gtag.js) - Google Analytics