使用Guava的RateLimiter完成简单的大流量限流详解编程语言
编程语言 使用 详解 简单 完成 流量 限流 Guava
2023-06-13 09:20:45 时间
1、随机丢弃一定规则的用户(迅速过滤掉90%的用户);
2、MQ削峰(比如设一个MQ可以容纳的最大消息量,达到这个量后MQ给予reject);
3、业务逻辑层使用RateLimiter进行限流;
4、最终可以承受的流量到达DB层。
package ratelimiter; import com.google.common.util.concurrent.RateLimiter; import org.springframework.stereotype.Component; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; * @author xfyou * @date 2018/10/31 @Component public class AccessLimitService { private static volatile int acquireCount = 0; private static final Object OBJECT = new Object(); /** * 每秒可以获得50个许可证 private RateLimiter rateLimiter = RateLimiter.create(50); private boolean tryAcquire() { // 等待1秒钟如果未能获取到许可证就返回false,否则返回true return rateLimiter.tryAcquire(1, 1000, TimeUnit.MILLISECONDS); public static void main(String[] args) { AccessLimitService accessLimitService = new AccessLimitService(); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i 1000; i++) { executorService.execute(new Runnable() { @Override public void run() { if (accessLimitService.tryAcquire()) { System.out.println("获取许可证,执行业务逻辑。"); synchronized (OBJECT) { System.out.println(++acquireCount); try { Thread.sleep(20); } catch (InterruptedException ex) { } else { System.err.println("未获取到许可证,请求可以丢弃。"); }); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); executorService.shutdown(); }
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15893.html
cgojava相关文章
- 5 种使用 Python 代码轻松实现数据可视化的方法详解编程语言
- Java 线程池(ThreadPoolExecutor)原理分析与使用详解编程语言
- Python使用Gmail发邮件详解编程语言
- 使用Android新式LruCache缓存图片,基于线程池异步加载图片详解编程语言
- Apache Commons Email使用心得详解编程语言
- Picasso开源图片加载利器使用初探详解编程语言
- java使用ImageReader判断图片的类型详解编程语言
- 使用微软的标准方法实现Ajax详解编程语言
- Hibernate_day02讲义_使用Hibernate完成CRM客户管理中查询所有客户的操作详解编程语言
- 使用express搭建第一个Web应用Node.js初学详解编程语言
- STL中的nth_element()方法的使用详解编程语言
- [Linux] 使用openssl实现RSA非对称加密详解编程语言
- [PHP] Yaf框架的简单安装使用详解编程语言
- Myeclipse Db Browser使用详解编程语言
- 阿里云MQ消息队列详细使用说明文档详解编程语言
- Spring配置框架之javaconfig使用方式详解编程语言
- PHP5.4 Trait 使用详解编程语言
- Spring Cloud(十一):Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式详解编程语言
- spring项目使用mave将第三方jar包打进war包中详解编程语言
- PHP中使用OpenSSL生成RSA公钥私钥及进行加密解密示例(非对称加密)详解编程语言
- CSS强制文本在一行内显示若有多余字符则使用省略号表示详解编程语言
- 函数使用三:采购过账BAPI_GOODSMVT_CREATE详解编程语言
- jquery trigger使用方法详解编程语言
- 【Java】使用socket实现控制台多线程聊天室详解编程语言
- php下webservice使用总结详解编程语言
- python的memory_profiler模块使用详解编程语言