All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dreamlu.mica.redis.config.RateLimiterAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 3.3.2
Show newest version
/*
 * Copyright (c) 2019-2029, Dreamlu 卢春梦 ([email protected] & www.dreamlu.net).
 * 

* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.gnu.org/licenses/lgpl.html *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.dreamlu.mica.redis.config; import net.dreamlu.mica.redis.ratelimiter.RedisRateLimiterAspect; import net.dreamlu.mica.redis.ratelimiter.RedisRateLimiterClient; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.data.redis.core.script.RedisScript; import org.springframework.scripting.support.ResourceScriptSource; /** * 基于 redis 的分布式限流自动配置 * * @author L.cm */ @AutoConfiguration @ConditionalOnProperty(value = "mica.redis.rate-limiter.enable") public class RateLimiterAutoConfiguration { private RedisScript redisRateLimiterScript() { DefaultRedisScript redisScript = new DefaultRedisScript<>(); redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("META-INF/scripts/mica_rate_limiter.lua"))); redisScript.setResultType(Long.class); return redisScript; } @Bean @ConditionalOnMissingBean public RedisRateLimiterClient redisRateLimiter(StringRedisTemplate redisTemplate, Environment environment) { RedisScript redisRateLimiterScript = redisRateLimiterScript(); return new RedisRateLimiterClient(redisTemplate, redisRateLimiterScript, environment); } @Bean @ConditionalOnMissingBean public RedisRateLimiterAspect redisRateLimiterAspect(RedisRateLimiterClient rateLimiterClient) { return new RedisRateLimiterAspect(rateLimiterClient); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy