add FrequencyControl

This commit is contained in:
zengwei-cogiot
2023-09-11 18:12:34 +08:00
parent 81d60f6453
commit 0564483102
32 changed files with 2647 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package com.abin.mallchat.common;
public interface FrequencyControlConstant {
String TOTAL_COUNT_WITH_IN_FIX_TIME_FREQUENCY_CONTROLLER = "TotalCountWithInFixTime";
String SLIDING_WINDOW_FREQUENCY_CONTROLLER = "SlidingWindow";
String TOKEN_BUCKET_FREQUENCY_CONTROLLER = "TokenBucket";
}

View File

@@ -0,0 +1,30 @@
package com.abin.mallchat.utils;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
import java.util.Optional;
public class SpElUtils {
private static final ExpressionParser parser = new SpelExpressionParser();
private static final DefaultParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer();
public static String parseSpEl(Method method, Object[] args, String spEl) {
String[] params = Optional.ofNullable(parameterNameDiscoverer.getParameterNames(method)).orElse(new String[]{});//解析参数名
EvaluationContext context = new StandardEvaluationContext();//el解析需要的上下文对象
for (int i = 0; i < params.length; i++) {
context.setVariable(params[i], args[i]);//所有参数都作为原材料扔进去
}
Expression expression = parser.parseExpression(spEl);
return expression.getValue(context, String.class);
}
public static String getMethodKey(Method method) {
return method.getDeclaringClass() + "#" + method.getName();
}
}