From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RateLimiterClient.java | 91 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 91 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RateLimiterClient.java b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RateLimiterClient.java new file mode 100644 index 0000000..5a13545 --- /dev/null +++ b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RateLimiterClient.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2018-2028, DreamLu All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com) + */ + +package org.springblade.core.redis.ratelimiter; + + +import org.springblade.core.tool.function.CheckedSupplier; +import org.springblade.core.tool.utils.Exceptions; + +import java.util.concurrent.TimeUnit; + +/** + * RateLimiter 闄愭祦 Client + * + * @author L.cm + */ +public interface RateLimiterClient { + + /** + * 鏈嶅姟鏄惁琚檺娴� + * + * @param key 鑷畾涔夌殑key锛岃淇濊瘉鍞竴 + * @param max 鏀寔鐨勬渶澶ц姹� + * @param ttl 鏃堕棿,鍗曚綅榛樿涓虹锛坰econds锛� + * @return 鏄惁鍏佽 + */ + default boolean isAllowed(String key, long max, long ttl) { + return this.isAllowed(key, max, ttl, TimeUnit.SECONDS); + } + + /** + * 鏈嶅姟鏄惁琚檺娴� + * + * @param key 鑷畾涔夌殑key锛岃淇濊瘉鍞竴 + * @param max 鏀寔鐨勬渶澶ц姹� + * @param ttl 鏃堕棿 + * @param timeUnit 鏃堕棿鍗曚綅 + * @return 鏄惁鍏佽 + */ + boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit); + + /** + * 鏈嶅姟闄愭祦锛岃闄愬埗鏃舵姏鍑� RateLimiterException 寮傚父锛岄渶瑕佽嚜琛屽鐞嗗紓甯� + * + * @param key 鑷畾涔夌殑key锛岃淇濊瘉鍞竴 + * @param max 鏀寔鐨勬渶澶ц姹� + * @param ttl 鏃堕棿 + * @param supplier Supplier 鍑芥暟寮� + * @return 鍑芥暟鎵ц缁撴灉 + */ + default <T> T allow(String key, long max, long ttl, CheckedSupplier<T> supplier) { + return allow(key, max, ttl, TimeUnit.SECONDS, supplier); + } + + /** + * 鏈嶅姟闄愭祦锛岃闄愬埗鏃舵姏鍑� RateLimiterException 寮傚父锛岄渶瑕佽嚜琛屽鐞嗗紓甯� + * + * @param key 鑷畾涔夌殑key锛岃淇濊瘉鍞竴 + * @param max 鏀寔鐨勬渶澶ц姹� + * @param ttl 鏃堕棿 + * @param timeUnit 鏃堕棿鍗曚綅 + * @param supplier Supplier 鍑芥暟寮� + * @param <T> + * @return 鍑芥暟鎵ц缁撴灉 + */ + default <T> T allow(String key, long max, long ttl, TimeUnit timeUnit, CheckedSupplier<T> supplier) { + boolean isAllowed = this.isAllowed(key, max, ttl, timeUnit); + if (isAllowed) { + try { + return supplier.get(); + } catch (Throwable e) { + throw Exceptions.unchecked(e); + } + } + throw new RateLimiterException(key, max, ttl, timeUnit); + } +} -- Gitblit v1.9.3