Skip to content

Commit 35f0962

Browse files
committed
ApiBoot RateLimiter 集成Redis分布式限流方式
1 parent b065ad3 commit 35f0962

File tree

2 files changed

+79
-4
lines changed

2 files changed

+79
-4
lines changed

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/ratelimiter/ApiBootRateLimiterAutoConfiguration.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@
1717

1818
package org.minbox.framework.api.boot.autoconfigure.ratelimiter;
1919

20+
import org.minbox.framework.api.boot.plugin.rate.limiter.ApiBootRateLimiter;
2021
import org.minbox.framework.api.boot.plugin.rate.limiter.ApiBootRateLimiterConfiguration;
2122
import org.minbox.framework.api.boot.plugin.rate.limiter.config.RateLimiterConfig;
2223
import org.minbox.framework.api.boot.plugin.rate.limiter.handler.ApiBootDefaultRateLimiterInterceptorHandler;
24+
import org.minbox.framework.api.boot.plugin.rate.limiter.support.GoogleGuavaRateLimiter;
2325
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2426
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2527
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
28+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
2629
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
2730
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2831
import org.springframework.context.annotation.Bean;
2932
import org.springframework.context.annotation.Configuration;
33+
import org.springframework.context.annotation.Import;
3034

3135
/**
3236
* ApiBoot RateLimiter Auto Configuration
@@ -43,6 +47,7 @@
4347
@ConditionalOnClass(ApiBootRateLimiterConfiguration.class)
4448
@EnableConfigurationProperties(ApiBootRateLimiterProperties.class)
4549
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
50+
@Import(ApiBootRateLimiterRedisAutoConfiguration.class)
4651
public class ApiBootRateLimiterAutoConfiguration {
4752
/**
4853
* ApiBoot Rate Limiter Properties
@@ -60,8 +65,20 @@ public ApiBootRateLimiterAutoConfiguration(ApiBootRateLimiterProperties apiBootR
6065
*/
6166
@Bean
6267
@ConditionalOnMissingBean
63-
public ApiBootDefaultRateLimiterInterceptorHandler apiBootDefaultRateLimiterInterceptorHandler() {
64-
return new ApiBootDefaultRateLimiterInterceptorHandler();
68+
public ApiBootDefaultRateLimiterInterceptorHandler apiBootDefaultRateLimiterInterceptorHandler(ApiBootRateLimiter apiBootRateLimiter) {
69+
return new ApiBootDefaultRateLimiterInterceptorHandler(apiBootRateLimiter);
70+
}
71+
72+
/**
73+
* google guava rate limiter
74+
*
75+
* @return ApiBootRateLimiter
76+
*/
77+
@Bean
78+
@ConditionalOnMissingBean
79+
@ConditionalOnMissingClass("org.springframework.data.redis.core.RedisTemplate")
80+
public ApiBootRateLimiter googleGuavaRateLimiter() {
81+
return new GoogleGuavaRateLimiter();
6582
}
6683

6784
/**
@@ -71,11 +88,11 @@ public ApiBootDefaultRateLimiterInterceptorHandler apiBootDefaultRateLimiterInte
7188
*/
7289
@Bean
7390
@ConditionalOnMissingBean
74-
public ApiBootRateLimiterConfiguration apiBootRateLimiterConfiguration() {
91+
public ApiBootRateLimiterConfiguration apiBootRateLimiterConfiguration(ApiBootDefaultRateLimiterInterceptorHandler apiBootDefaultRateLimiterInterceptorHandler) {
7592
// rate limiter config
7693
RateLimiterConfig rateLimiterConfig = new RateLimiterConfig();
7794
rateLimiterConfig.setInterceptorUrl(apiBootRateLimiterProperties.getInterceptorUrl());
7895

79-
return new ApiBootRateLimiterConfiguration(rateLimiterConfig, apiBootDefaultRateLimiterInterceptorHandler());
96+
return new ApiBootRateLimiterConfiguration(rateLimiterConfig, apiBootDefaultRateLimiterInterceptorHandler);
8097
}
8198
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright [2019] [恒宇少年 - 于起宇]
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
18+
package org.minbox.framework.api.boot.autoconfigure.ratelimiter;
19+
20+
import org.minbox.framework.api.boot.plugin.rate.limiter.ApiBootRateLimiter;
21+
import org.minbox.framework.api.boot.plugin.rate.limiter.support.RedisLuaRateLimiter;
22+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
25+
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
28+
import org.springframework.data.redis.core.ReactiveRedisTemplate;
29+
import org.springframework.data.redis.core.RedisTemplate;
30+
31+
/**
32+
* RateLimiter Automation Configuration in redis Mode
33+
*
34+
* @author:恒宇少年 - 于起宇
35+
* <p>
36+
* DateTime:2019-05-05 17:50
37+
* Blog:http://blog.yuqiyu.com
38+
* WebSite:http://www.jianshu.com/u/092df3f77bca
39+
* Gitee:https://gitee.com/hengboy
40+
* GitHub:https://github.com/hengboy
41+
*/
42+
@Configuration
43+
@ConditionalOnClass(RedisTemplate.class)
44+
@AutoConfigureAfter(RedisAutoConfiguration.class)
45+
public class ApiBootRateLimiterRedisAutoConfiguration {
46+
47+
/**
48+
* redis lua rate limiter
49+
*
50+
* @param redisTemplate redis template
51+
* @return ApiBootRateLimiter
52+
*/
53+
@Bean
54+
@ConditionalOnMissingBean
55+
public ApiBootRateLimiter redisLuaRateLimiter(RedisTemplate redisTemplate) {
56+
return new RedisLuaRateLimiter(redisTemplate);
57+
}
58+
}

0 commit comments

Comments
 (0)