怎么按apiName作为参数做一个方法限流,相信大家对方法限流的运用场景并不少见,
首先,我们就来分析方法限流的实现过程吧,
第一,方法限流必须保证线程安全,这里我们先来介绍一下什么是线程安全吧,
线程安全简单来说就是在多线程访问一个对象的时候,对象的值/状态不会因为多线程的环境而产生影响。
第二,我们需要通过时间和调用频率来限制该对象的调用,所以比较好的方法是通过一个对象
来存储每个apiName对应的调用情况时间和频率,如下我们用CacheValidate类来进行存储,
我们采用isValidate方法判断调用次数是否超限。
这时候,我们的思路就很明显了,我们需要用一个map对象进行apiName(key)和
CacheValidate(value)的存储。这时候我们的代码就能够很简单的写出来。
public class CacheValidate {
private long time;private int invokeNum;
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getInvokeNum() {
return invokeNum;
}
public void setInvokeNum(int invokeNum) {