From 42f46b95a93898e232033130da740a2b1da1226c Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Thu, 12 Sep 2019 15:55:26 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-ratelimit-guava?=
=?UTF-8?q?=20=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring-boot-demo-ratelimit-guava/README.md | 213 +++++++++++++++++++++
.../assets/image-20190912155146012.png | Bin 0 -> 44522 bytes
.../assets/image-20190912155209716.png | Bin 0 -> 48808 bytes
.../assets/image-20190912155229745.png | Bin 0 -> 36346 bytes
4 files changed, 213 insertions(+)
create mode 100644 spring-boot-demo-ratelimit-guava/assets/image-20190912155146012.png
create mode 100644 spring-boot-demo-ratelimit-guava/assets/image-20190912155209716.png
create mode 100644 spring-boot-demo-ratelimit-guava/assets/image-20190912155229745.png
diff --git a/spring-boot-demo-ratelimit-guava/README.md b/spring-boot-demo-ratelimit-guava/README.md
index a07ee9f..fb19da2 100644
--- a/spring-boot-demo-ratelimit-guava/README.md
+++ b/spring-boot-demo-ratelimit-guava/README.md
@@ -1,2 +1,215 @@
# spring-boot-demo-ratelimit-guava
+> 此 demo 主要演示了 Spring Boot 项目如何通过 AOP 结合 Guava 的 RateLimiter 实现限流,旨在保护 API 被恶意频繁访问的问题。
+
+## 1. 主要代码
+
+### 1.1. pom.xml
+
+```xml
+
+
+ 4.0.0
+
+ spring-boot-demo-ratelimit-guava
+ 1.0.0-SNAPSHOT
+ jar
+
+ spring-boot-demo-ratelimit-guava
+ Demo project for Spring Boot
+
+
+ com.xkcoding
+ spring-boot-demo
+ 1.0.0-SNAPSHOT
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+ cn.hutool
+ hutool-all
+
+
+
+ com.google.guava
+ guava
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+ spring-boot-demo-ratelimit-guava
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+```
+
+### 1.2. 定义一个限流注解 `RateLimiter.java`
+
+> 注意代码里使用了 `AliasFor` 设置一组属性的别名,所以获取注解的时候,需要通过 `Spring` 提供的注解工具类 `AnnotationUtils` 获取,不可以通过 `AOP` 参数注入的方式获取,否则有些属性的值将会设置不进去。
+
+```java
+/**
+ *
+ * 限流注解,添加了 {@link AliasFor} 必须通过 {@link AnnotationUtils} 获取,才会生效
+ *
+ * @author yangkai.shen
+ * @date Created in 2019/9/12 14:14
+ * @see AnnotationUtils
+ *
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RateLimiter {
+ int NOT_LIMITED = 0;
+
+ /**
+ * qps
+ */
+ @AliasFor("qps") double value() default NOT_LIMITED;
+
+ /**
+ * qps
+ */
+ @AliasFor("value") double qps() default NOT_LIMITED;
+
+ /**
+ * 超时时长
+ */
+ int timeout() default 0;
+
+ /**
+ * 超时时间单位
+ */
+ TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
+}
+```
+
+### 1.3. 定义一个切面 `RateLimiterAspect.java`
+
+```java
+/**
+ *
+ * 限流切面
+ *
+ *
+ * @author yangkai.shen
+ * @date Created in 2019/9/12 14:27
+ */
+@Slf4j
+@Aspect
+@Component
+public class RateLimiterAspect {
+ private static final com.google.common.util.concurrent.RateLimiter RATE_LIMITER = com.google.common.util.concurrent.RateLimiter.create(Double.MAX_VALUE);
+
+ @Pointcut("@annotation(com.xkcoding.ratelimit.guava.annotation.RateLimiter)")
+ public void rateLimit() {
+
+ }
+
+ @Around("rateLimit()")
+ public Object pointcut(ProceedingJoinPoint point) throws Throwable {
+ MethodSignature signature = (MethodSignature) point.getSignature();
+ Method method = signature.getMethod();
+ // 通过 AnnotationUtils.findAnnotation 获取 RateLimiter 注解
+ RateLimiter rateLimiter = AnnotationUtils.findAnnotation(method, RateLimiter.class);
+ if (rateLimiter != null && rateLimiter.qps() > RateLimiter.NOT_LIMITED) {
+ double qps = rateLimiter.qps();
+ log.debug("【{}】的QPS设置为: {}", method.getName(), qps);
+ // 重新设置 QPS
+ RATE_LIMITER.setRate(qps);
+ // 尝试获取令牌
+ if (!RATE_LIMITER.tryAcquire(rateLimiter.timeout(), rateLimiter.timeUnit())) {
+ throw new RuntimeException("手速太快了,慢点儿吧~");
+ }
+ }
+ return point.proceed();
+ }
+}
+```
+
+### 1.4. 定义两个API接口用于测试限流
+
+```java
+/**
+ *
+ * 测试
+ *
+ *
+ * @author yangkai.shen
+ * @date Created in 2019/9/12 14:22
+ */
+@Slf4j
+@RestController
+public class TestController {
+
+ @RateLimiter(value = 1.0, timeout = 300)
+ @GetMapping("/test1")
+ public Dict test1() {
+ log.info("【test1】被执行了。。。。。");
+ return Dict.create().set("msg", "hello,world!").set("description", "别想一直看到我,不信你快速刷新看看~");
+ }
+
+ @GetMapping("/test2")
+ public Dict test2() {
+ log.info("【test2】被执行了。。。。。");
+ return Dict.create().set("msg", "hello,world!").set("description", "我一直都在,卟离卟弃");
+ }
+}
+```
+
+## 2. 测试
+
+- test1 接口未被限流的时候
+
+
+
+- test1 接口频繁刷新,触发限流的时候
+
+
+
+- test2 接口不做限流,可以一直刷新
+
+
+
+## 3. 参考
+
+- [限流原理解读之guava中的RateLimiter](https://juejin.im/post/5bb48d7b5188255c865e31bc)
+
+- [使用Guava的RateLimiter做限流](https://my.oschina.net/hanchao/blog/1833612)
+
diff --git a/spring-boot-demo-ratelimit-guava/assets/image-20190912155146012.png b/spring-boot-demo-ratelimit-guava/assets/image-20190912155146012.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7c4eb1ff4afd98cf5d0ad54188d8e40e1bf19c5
GIT binary patch
literal 44522
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 Uuk
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